Quick check of the first no-genetic data demultiplex sequencing from the pilot. NPCs

library(Seurat)
library(tidyverse)
#library(DoubletFinder)
library(enrichR)
Welcome to enrichR
Checking connection ... 
Enrichr ... Connection is Live!
FlyEnrichr ... Connection is available!
WormEnrichr ... Connection is available!
YeastEnrichr ... Connection is available!
FishEnrichr ... Connection is available!
OxEnrichr ... Connection is available!
library(clustree)
Loading required package: ggraph
#library("scClassify")
#library(SingleCellExperiment)
#library("Matrix")

Read in the data

dim(seu)
[1] 33538 17520

table(seu$souporcell_assignment)

         0          1         10         11         12          2          3          4          5 
      1135       1028        426       3134       2494        207       2331        187        307 
         6          7          8          9    doublet unassigned 
       381       1192        599       1510       2069        520 

Look at the sequencing


VlnPlot(seu, features = c("nCount_RNA","nFeature_RNA"), pt.size = 0.001)

VlnPlot(seu, features = c("nFeature_RNA"), pt.size = 0.001, y.max = 500)
Warning: Removed 16577 rows containing non-finite values (`stat_ydensity()`).
Warning: Removed 16577 rows containing missing values (`geom_point()`).

table(seu$souporcell_status)

   doublet    singlet unassigned 
      1820      13603         50 
dim(seu)
[1] 33538 15473

Calculate the percent mitochondrial genes

seu$percent.MT %>% summary
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  0.000   2.578   3.541   4.201   4.591  62.044 
VlnPlot(seu, features = "percent.MT", pt.size = 0.001)

VlnPlot(seu, features = "percent.MT", pt.size = 0.001, y.max = 20)
Warning: Removed 339 rows containing non-finite values (`stat_ydensity()`).
Warning: Removed 339 rows containing missing values (`geom_point()`).

I’ll use 10% as a cutoff and check if this removes more of the low read cells. I believe this object is already the CellRanger Filtered object.

VlnPlot(seu, features = c("nCount_RNA","nFeature_RNA"), group.by = "souporcell_status")
# see most of the unassigned have low counts and features and doublets have higher counts and higher features

VlnPlot(seu, features = c("nCount_RNA"), group.by = "souporcell_status", y.max = 5000)
Warning: Removed 14766 rows containing non-finite values (`stat_ydensity()`).
Warning: Removed 14766 rows containing missing values (`geom_point()`).

VlnPlot(seu, features = c("nFeature_RNA"), group.by = "souporcell_status", y.max = 2000)
Warning: Removed 14261 rows containing non-finite values (`stat_ydensity()`).
Warning: Removed 14261 rows containing missing values (`geom_point()`).

I will filter for higher counts and lower counts

dim(seu)
[1] 33538 17520
dim(seu.ft)
[1] 33538 16864
dim(seu.ft2)
[1] 33538 15473
# this removes 1391 

VlnPlot(seu.ft2, features = c("nCount_RNA","nFeature_RNA","percent.MT"), pt.size = 0.001)


# how many of each line do we detect

table(seu.ft2$souporcell_assignment)

         0          1         10         11         12          2          3          4          5 
      1021        971        374       2913       2356         74       2165         92        232 
         6          7          8          9    doublet unassigned 
       348       1096        548       1413       1820         50 
VlnPlot(seu.ft2, features = c("nCount_RNA","nFeature_RNA","percent.MT"), group.by = "souporcell_assignment", pt.size = 0.001)

clean up


seu <- seu.ft2
rm(seu.ft2, seu.ft)

Now the workflow to make clusters

p2
Warning: Transformation introduced infinite values in continuous x-axis

Scale and get PCA



#Linear dimensionality reduction
#Choosing the number of PCs can depend on how many cells you have
seu <- ScaleData(seu)
Centering and scaling data matrix

  |                                                                                                 
  |                                                                                           |   0%
  |                                                                                                 
  |==============================                                                             |  33%
  |                                                                                                 
  |=============================================================                              |  67%
  |                                                                                                 
  |===========================================================================================| 100%
seu <- RunPCA(seu, assay = "RNA", npcs = 30)
PC_ 1 
Positive:  CKB, TUBB2B, MAP1B, TUBA1A, CRABP1, FZD3, TTYH1, SOX2, HSP90AA1, HMGA1 
       POU3F2, BEX1, CRMP1, KIF5C, MAP2, RFX4, DRAXIN, SOX11, FGFBP3, HES6 
       PRTG, SRGAP3, GPM6B, LIN28A, TAGLN3, SYT11, MIAT, ELAVL2, MAP6, NES 
Negative:  COL3A1, LGALS1, S100A11, LUM, DCN, SPARC, PCOLCE, B2M, COL1A1, CDH11 
       SERPINH1, APOE, IFITM3, FN1, COL5A2, COL5A1, COL6A2, RRBP1, TIMP1, SELENOM 
       COLEC12, CALD1, LAPTM4A, BGN, COL6A3, TPM1, COL1A2, EMP3, IFI16, IGFBP4 
PC_ 2 
Positive:  STMN2, DCX, TAGLN3, INA, ELAVL3, STMN4, NEFM, KLHL35, ELAVL4, ONECUT2 
       SCG3, NHLH1, DCC, SRRM4, SYT1, MLLT11, INSM1, CNTN2, NCAM1, DLL3 
       ATCAY, SOX4, CDKN1C, TFAP2B, GDAP1L1, GNG3, SSTR2, CLDN5, ELAVL2, KIF5C 
Negative:  HMGB2, CENPF, TOP2A, CKS1B, MKI67, NUSAP1, BIRC5, TUBA1B, H2AFZ, TPX2 
       CCNB1, CKS2, H2AFX, ASPM, UBE2C, MAD2L1, SMC4, DLGAP5, GTSE1, PTTG1 
       PCLAF, TUBB4B, CENPE, TYMS, CDK1, HSPD1, CCNA2, KIF20B, CDC20, KIF11 
PC_ 3 
Positive:  KRT19, KRT8, THY1, S100A10, TM4SF1, NPNT, KRT18, HAND2, MYRF, NNMT 
       DSG2, RPP25, MATN2, ASPHD1, FXYD5, GATA6, LMCD1, SLC9A3R1, KCNK6, PLP2 
       LRRN4, PITX1, CYBA, MAN1A1, KDR, BNC1, COL1A1, ANXA1, S100A16, POSTN 
Negative:  IFI44L, PRRX1, SMOC2, PTH1R, SFRP1, ZIC1, TWIST1, LRRC17, DAB2, COLEC12 
       CDC42EP5, CPE, TPM1, SLC1A3, NAV3, FOXC1, ID1, IFI44, FRZB, COL26A1 
       AKAP12, DACT2, PRRX2, NNAT, LAMA4, RND3, FN1, VCAN, TCIM, SIX1 
PC_ 4 
Positive:  TNNI1, DES, NEB, TNNT1, MYL1, KLHL41, TTN, TNNC2, CHRNA1, MYL4 
       MYOG, MYLPF, ENO3, CDH15, SMPX, ACTC1, TNNT2, MYOD1, AC020909.2, MRLN 
       IL17B, SGCA, FITM1, SYNPO2L, MYH3, TRIM55, TNNC1, ATP2A1, APOBEC2, SMYD1 
Negative:  PTN, IGFBP2, CRABP1, GJA1, ZIC2, IFI16, PDLIM1, COL11A1, VCAN, FABP5 
       TTYH1, SFRP1, IFIT3, DAB2, CLU, SERPING1, PARP14, SOX2, IFITM1, MGP 
       SMOC2, C7, SFRP2, ARHGAP29, IFI6, CDC42EP5, SLC1A3, CMBL, LIFR, FTH1 
PC_ 5 
Positive:  ASPM, CENPE, TPX2, TOP2A, UBE2C, GTSE1, MKI67, UBE2S, SGO2, DLGAP5 
       ARL6IP1, KPNA2, PLK1, NUSAP1, AURKA, CCNB1, PIF1, CENPF, NDC80, HMMR 
       KIF2C, CDK1, KIF20B, CDCA8, DEPDC1, KIF11, TTK, KIF23, CDCA2, CDCA3 
Negative:  RPL12, VIM, AL359091.1, TTYH1, HES5, NPPC, HMGA1, MCM6, MCM5, AL139246.5 
       SERF2, GSTP1, DDIT4, SFRP2, CCND1, IGFBP5, RFX4, FGFBP3, SMOC1, MGST1 
       RPL22L1, DIO3, FAM111B, MCM4, SOX2, MCM3, RPRML, HSPE1, TKTL1, HSPB1 
PCAPlot(seu)


#Assess how many PCs capture most of the information in the data 
ElbowPlot(seu, ndims = 30)

20 PCs are good now make the UMAP

Find clusters


seu <- FindNeighbors(seu, dims = 1:20, k.param = 121)
Computing nearest neighbor graph
Computing SNN
# the number of clusters is dependent on the resolution a number from 0-2. 
# Higher values make more clusters
# we include 
seu <- FindClusters(seu, resolution = c(0,0.05,0.25,0.4,0.5,0.6,1,1.5) )
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 15473
Number of edges: 2981694

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 1.0000
Number of communities: 1
Elapsed time: 5 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 15473
Number of edges: 2981694

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9714
Number of communities: 4
Elapsed time: 6 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 15473
Number of edges: 2981694

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9167
Number of communities: 6
Elapsed time: 7 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 15473
Number of edges: 2981694

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.8917
Number of communities: 9
Elapsed time: 7 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 15473
Number of edges: 2981694

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.8775
Number of communities: 10
Elapsed time: 7 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 15473
Number of edges: 2981694

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.8662
Number of communities: 11
Elapsed time: 7 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 15473
Number of edges: 2981694

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.8261
Number of communities: 14
Elapsed time: 8 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 15473
Number of edges: 2981694

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.7905
Number of communities: 21
Elapsed time: 7 seconds
# we can visualize which cells are grouped together at different resolutions using clustree

clustree(seu, prefix = "RNA_snn_res.")

NA
NA

Visualize

DimPlot(seu, group.by = "RNA_snn_res.0.6", label = TRUE)

DimPlot(seu, group.by = "RNA_snn_res.1", label = TRUE)

Look at expression profiles of known cell type markers



da_neurons <- c("TH","SLC6A3","SLC18A2","SOX6","NDNF","SNCG","ALDH1A1","CALB1","TACR2","SLC17A6","SLC32A1","OTX2","GRP","LPL","CCK","VIP")
NPC_orStemLike <- c("DCX","NEUROD1","TBR1","PCNA","MKI67","SOX2","NES","PAX6","MASH1")
mature_neurons = c("RBFOX3","SYP","DLG45","VAMP1","VAMP2","TUBB3","SYT1","BSN","HOMER1","SLC17A6")
excitatory_neurons = c("GRIA2","GRIA1","GRIA4","GRIN1","GRIN2B","GRIN2A","GRIN3A","GRIN3","GRIP1","CAMK2A")
inhbitory_neurons = inh = c("GAD1","GAD2", "GAT1","PVALB","GABR2","GABR1","GBRR1","GABRB2","GABRB1","GABRB3","GABRA6","GABRA1","GABRA4","TRAK2")
astrocytes <- c("GFAP","S100B","AQP4","APOE", "SOX9","SLC1A3")
oligodendrocytes <- c("MBP","MOG","OLIG1","OLIG2","SOX10")
opc <- 
radial_glia <- c("PTPRC","AIF1","ADGRE1", "VIM", "TNC","PTPRZ1","FAM107A","HOPX","LIFR",
              "ITGB5","IL6ST","SLC1A3")
epithelial <- c("HES1","HES5","SOX2","SOX10","NES","CDH1","NOTCH1")

microglia <- c("IBA1","P2RY12","P2RY13","TREM119", "GPR34","SIGLECH","TREM2",
               "CX3CR1","FCRLS","OLFML3","HEXB","TGFBR1", "SALL1","MERTK",
               "PROS1")

features_list <- c("MKI67","SOX2","POU5F1","DLX2","PAX6","SOX9","HES1","NES","RBFOX3","MAP2","NCAM1","CD24","GRIA2","GRIN2B","GABBR1","GAD1","GAD2","GABRA1","GABRB2","TH","ALDH1A1","LMX1B","NR4A2","CORIN","CALB1","KCNJ6","CXCR4","ITGA6","SLC1A3","CD44","AQP4","S100B", "PDGFRA","OLIG2","MBP","CLDN11","VIM","VCAM1")

short_list <- c("MKI67","SOX9","HES1","NES","DLX2","RBFOX3","MAP2","TH","CALB1","KCNJ6","SLC1A3","CD44","AQP4","S100B","OLIG2","MBP","VIM")

View on UMAP


Idents(seu) <- "RNA_snn_res.0.6"

for (i in NPC_orStemLike) {
  print(FeaturePlot(seu, features = i, min.cutoff = 'q1', max.cutoff = 'q97', label = TRUE))
}
Warning in FetchData.Seurat(object = object, vars = c(dims, "ident", features),  :
  The following requested variables were not found: MASH1
Error: None of the requested features were found: MASH1 in slot data

Idents(seu) <- "RNA_snn_res.0.6"

for (i in astrocytes) {
  print(FeaturePlot(seu, features = i, min.cutoff = 'q1', max.cutoff = 'q97', label = TRUE))
}


Idents(seu) <- "RNA_snn_res.0.6"

for (i in radial_glia) {
  print(FeaturePlot(seu, features = i, min.cutoff = 'q1', max.cutoff = 'q97', label = TRUE))
}
Warning in FeaturePlot(seu, features = i, min.cutoff = "q1", max.cutoff = "q97",  :
  All cells have the same value (0) of ADGRE1.

Idents(seu) <- "RNA_snn_res.0.6"

mature_neuronsB = c("RBFOX3","SYP","VAMP1","VAMP2","TUBB3","SYT1","BSN","HOMER1","SLC17A6")
for (i in mature_neuronsB) {
  print(FeaturePlot(seu, features = i, min.cutoff = 'q1', max.cutoff = 'q97', label = TRUE))
}

NA
NA
NA

Dot plots and heatmaps

DotPlot(seu, features = radial_glia)+ RotatedAxis()

DotPlot(seu, features = NPC_orStemLike) + RotatedAxis()
Warning in FetchData.Seurat(object = object, vars = features, cells = cells) :
  The following requested variables were not found: MASH1

DotPlot(seu, features = astrocytes) + RotatedAxis()

Find cluster markers

Idents(seu) <- "RNA_snn_res.0.6"
ClusterMarkers <- FindAllMarkers(seu, only.pos = TRUE)
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~13s          
  |++                                                | 2 % ~13s          
  |++                                                | 3 % ~12s          
  |+++                                               | 4 % ~12s          
  |+++                                               | 5 % ~12s          
  |++++                                              | 7 % ~12s          
  |++++                                              | 8 % ~12s          
  |+++++                                             | 9 % ~12s          
  |+++++                                             | 10% ~12s          
  |++++++                                            | 11% ~12s          
  |++++++                                            | 12% ~11s          
  |+++++++                                           | 13% ~11s          
  |++++++++                                          | 14% ~11s          
  |++++++++                                          | 15% ~11s          
  |+++++++++                                         | 16% ~11s          
  |+++++++++                                         | 17% ~11s          
  |++++++++++                                        | 18% ~10s          
  |++++++++++                                        | 20% ~10s          
  |+++++++++++                                       | 21% ~10s          
  |+++++++++++                                       | 22% ~10s          
  |++++++++++++                                      | 23% ~10s          
  |++++++++++++                                      | 24% ~10s          
  |+++++++++++++                                     | 25% ~10s          
  |++++++++++++++                                    | 26% ~09s          
  |++++++++++++++                                    | 27% ~09s          
  |+++++++++++++++                                   | 28% ~09s          
  |+++++++++++++++                                   | 29% ~09s          
  |++++++++++++++++                                  | 30% ~09s          
  |++++++++++++++++                                  | 32% ~09s          
  |+++++++++++++++++                                 | 33% ~09s          
  |+++++++++++++++++                                 | 34% ~08s          
  |++++++++++++++++++                                | 35% ~08s          
  |++++++++++++++++++                                | 36% ~08s          
  |+++++++++++++++++++                               | 37% ~08s          
  |++++++++++++++++++++                              | 38% ~08s          
  |++++++++++++++++++++                              | 39% ~08s          
  |+++++++++++++++++++++                             | 40% ~08s          
  |+++++++++++++++++++++                             | 41% ~07s          
  |++++++++++++++++++++++                            | 42% ~07s          
  |++++++++++++++++++++++                            | 43% ~07s          
  |+++++++++++++++++++++++                           | 45% ~07s          
  |+++++++++++++++++++++++                           | 46% ~07s          
  |++++++++++++++++++++++++                          | 47% ~07s          
  |++++++++++++++++++++++++                          | 48% ~07s          
  |+++++++++++++++++++++++++                         | 49% ~06s          
  |+++++++++++++++++++++++++                         | 50% ~06s          
  |++++++++++++++++++++++++++                        | 51% ~06s          
  |+++++++++++++++++++++++++++                       | 52% ~06s          
  |+++++++++++++++++++++++++++                       | 53% ~06s          
  |++++++++++++++++++++++++++++                      | 54% ~06s          
  |++++++++++++++++++++++++++++                      | 55% ~06s          
  |+++++++++++++++++++++++++++++                     | 57% ~06s          
  |+++++++++++++++++++++++++++++                     | 58% ~05s          
  |++++++++++++++++++++++++++++++                    | 59% ~05s          
  |++++++++++++++++++++++++++++++                    | 60% ~05s          
  |+++++++++++++++++++++++++++++++                   | 61% ~05s          
  |+++++++++++++++++++++++++++++++                   | 62% ~05s          
  |++++++++++++++++++++++++++++++++                  | 63% ~05s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~05s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~04s          
  |++++++++++++++++++++++++++++++++++                | 66% ~04s          
  |++++++++++++++++++++++++++++++++++                | 67% ~04s          
  |+++++++++++++++++++++++++++++++++++               | 68% ~04s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~04s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~04s          
  |++++++++++++++++++++++++++++++++++++              | 72% ~04s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~03s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~03s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~03s          
  |+++++++++++++++++++++++++++++++++++++++           | 76% ~03s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~03s          
  |++++++++++++++++++++++++++++++++++++++++          | 78% ~03s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++         | 80% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++        | 84% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=13s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~15s          
  |+                                                 | 2 % ~16s          
  |++                                                | 3 % ~15s          
  |++                                                | 4 % ~15s          
  |+++                                               | 5 % ~15s          
  |+++                                               | 6 % ~14s          
  |++++                                              | 7 % ~14s          
  |++++                                              | 8 % ~14s          
  |+++++                                             | 9 % ~14s          
  |+++++                                             | 10% ~14s          
  |++++++                                            | 11% ~14s          
  |++++++                                            | 12% ~13s          
  |+++++++                                           | 13% ~13s          
  |+++++++                                           | 14% ~13s          
  |++++++++                                          | 15% ~13s          
  |++++++++                                          | 16% ~13s          
  |+++++++++                                         | 17% ~13s          
  |+++++++++                                         | 18% ~12s          
  |++++++++++                                        | 19% ~12s          
  |++++++++++                                        | 20% ~12s          
  |+++++++++++                                       | 21% ~12s          
  |+++++++++++                                       | 22% ~12s          
  |++++++++++++                                      | 23% ~12s          
  |++++++++++++                                      | 24% ~11s          
  |+++++++++++++                                     | 25% ~11s          
  |+++++++++++++                                     | 26% ~11s          
  |++++++++++++++                                    | 27% ~11s          
  |++++++++++++++                                    | 28% ~11s          
  |+++++++++++++++                                   | 29% ~11s          
  |+++++++++++++++                                   | 30% ~10s          
  |++++++++++++++++                                  | 31% ~10s          
  |++++++++++++++++                                  | 32% ~10s          
  |+++++++++++++++++                                 | 33% ~10s          
  |+++++++++++++++++                                 | 34% ~10s          
  |++++++++++++++++++                                | 35% ~10s          
  |++++++++++++++++++                                | 36% ~09s          
  |+++++++++++++++++++                               | 37% ~09s          
  |+++++++++++++++++++                               | 38% ~09s          
  |++++++++++++++++++++                              | 39% ~09s          
  |++++++++++++++++++++                              | 40% ~09s          
  |+++++++++++++++++++++                             | 41% ~09s          
  |+++++++++++++++++++++                             | 42% ~09s          
  |++++++++++++++++++++++                            | 43% ~08s          
  |++++++++++++++++++++++                            | 44% ~08s          
  |+++++++++++++++++++++++                           | 45% ~08s          
  |+++++++++++++++++++++++                           | 46% ~08s          
  |++++++++++++++++++++++++                          | 47% ~08s          
  |++++++++++++++++++++++++                          | 48% ~08s          
  |+++++++++++++++++++++++++                         | 49% ~08s          
  |+++++++++++++++++++++++++                         | 50% ~07s          
  |++++++++++++++++++++++++++                        | 51% ~07s          
  |++++++++++++++++++++++++++                        | 52% ~07s          
  |+++++++++++++++++++++++++++                       | 53% ~07s          
  |+++++++++++++++++++++++++++                       | 54% ~07s          
  |++++++++++++++++++++++++++++                      | 55% ~07s          
  |++++++++++++++++++++++++++++                      | 56% ~07s          
  |+++++++++++++++++++++++++++++                     | 57% ~06s          
  |+++++++++++++++++++++++++++++                     | 58% ~06s          
  |++++++++++++++++++++++++++++++                    | 59% ~06s          
  |++++++++++++++++++++++++++++++                    | 60% ~06s          
  |+++++++++++++++++++++++++++++++                   | 61% ~06s          
  |+++++++++++++++++++++++++++++++                   | 62% ~06s          
  |++++++++++++++++++++++++++++++++                  | 63% ~05s          
  |++++++++++++++++++++++++++++++++                  | 64% ~05s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~05s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~05s          
  |++++++++++++++++++++++++++++++++++                | 67% ~05s          
  |++++++++++++++++++++++++++++++++++                | 68% ~05s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~05s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~04s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~04s          
  |++++++++++++++++++++++++++++++++++++              | 72% ~04s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~04s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~04s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~04s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~04s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~03s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~03s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~03s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++        | 84% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=15s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+                                                 | 2 % ~05s          
  |++                                                | 3 % ~05s          
  |+++                                               | 5 % ~05s          
  |++++                                              | 6 % ~05s          
  |++++                                              | 8 % ~05s          
  |+++++                                             | 9 % ~05s          
  |++++++                                            | 11% ~05s          
  |+++++++                                           | 12% ~05s          
  |+++++++                                           | 14% ~05s          
  |++++++++                                          | 15% ~05s          
  |+++++++++                                         | 17% ~05s          
  |++++++++++                                        | 18% ~05s          
  |++++++++++                                        | 20% ~05s          
  |+++++++++++                                       | 22% ~04s          
  |++++++++++++                                      | 23% ~04s          
  |+++++++++++++                                     | 25% ~04s          
  |++++++++++++++                                    | 26% ~04s          
  |++++++++++++++                                    | 28% ~04s          
  |+++++++++++++++                                   | 29% ~04s          
  |++++++++++++++++                                  | 31% ~04s          
  |+++++++++++++++++                                 | 32% ~04s          
  |+++++++++++++++++                                 | 34% ~04s          
  |++++++++++++++++++                                | 35% ~04s          
  |+++++++++++++++++++                               | 37% ~03s          
  |++++++++++++++++++++                              | 38% ~03s          
  |++++++++++++++++++++                              | 40% ~03s          
  |+++++++++++++++++++++                             | 42% ~03s          
  |++++++++++++++++++++++                            | 43% ~03s          
  |+++++++++++++++++++++++                           | 45% ~03s          
  |++++++++++++++++++++++++                          | 46% ~03s          
  |++++++++++++++++++++++++                          | 48% ~03s          
  |+++++++++++++++++++++++++                         | 49% ~03s          
  |++++++++++++++++++++++++++                        | 51% ~03s          
  |+++++++++++++++++++++++++++                       | 52% ~03s          
  |+++++++++++++++++++++++++++                       | 54% ~02s          
  |++++++++++++++++++++++++++++                      | 55% ~02s          
  |+++++++++++++++++++++++++++++                     | 57% ~02s          
  |++++++++++++++++++++++++++++++                    | 58% ~02s          
  |++++++++++++++++++++++++++++++                    | 60% ~02s          
  |+++++++++++++++++++++++++++++++                   | 62% ~02s          
  |++++++++++++++++++++++++++++++++                  | 63% ~02s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~02s          
  |++++++++++++++++++++++++++++++++++                | 66% ~02s          
  |++++++++++++++++++++++++++++++++++                | 68% ~02s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~02s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~02s          
  |+++++++++++++++++++++++++++++++++++++             | 72% ~01s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~01s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~01s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~01s          
  |++++++++++++++++++++++++++++++++++++++++          | 78% ~01s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=05s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~22s          
  |++                                                | 2 % ~21s          
  |++                                                | 3 % ~21s          
  |+++                                               | 5 % ~20s          
  |+++                                               | 6 % ~20s          
  |++++                                              | 7 % ~21s          
  |+++++                                             | 8 % ~21s          
  |+++++                                             | 9 % ~21s          
  |++++++                                            | 10% ~21s          
  |++++++                                            | 12% ~20s          
  |+++++++                                           | 13% ~20s          
  |+++++++                                           | 14% ~19s          
  |++++++++                                          | 15% ~19s          
  |+++++++++                                         | 16% ~19s          
  |+++++++++                                         | 17% ~18s          
  |++++++++++                                        | 19% ~18s          
  |++++++++++                                        | 20% ~18s          
  |+++++++++++                                       | 21% ~17s          
  |++++++++++++                                      | 22% ~17s          
  |++++++++++++                                      | 23% ~17s          
  |+++++++++++++                                     | 24% ~16s          
  |+++++++++++++                                     | 26% ~16s          
  |++++++++++++++                                    | 27% ~16s          
  |++++++++++++++                                    | 28% ~15s          
  |+++++++++++++++                                   | 29% ~15s          
  |++++++++++++++++                                  | 30% ~15s          
  |++++++++++++++++                                  | 31% ~15s          
  |+++++++++++++++++                                 | 33% ~14s          
  |+++++++++++++++++                                 | 34% ~14s          
  |++++++++++++++++++                                | 35% ~14s          
  |+++++++++++++++++++                               | 36% ~14s          
  |+++++++++++++++++++                               | 37% ~13s          
  |++++++++++++++++++++                              | 38% ~13s          
  |++++++++++++++++++++                              | 40% ~13s          
  |+++++++++++++++++++++                             | 41% ~13s          
  |+++++++++++++++++++++                             | 42% ~12s          
  |++++++++++++++++++++++                            | 43% ~12s          
  |+++++++++++++++++++++++                           | 44% ~12s          
  |+++++++++++++++++++++++                           | 45% ~11s          
  |++++++++++++++++++++++++                          | 47% ~11s          
  |++++++++++++++++++++++++                          | 48% ~11s          
  |+++++++++++++++++++++++++                         | 49% ~11s          
  |+++++++++++++++++++++++++                         | 50% ~10s          
  |++++++++++++++++++++++++++                        | 51% ~10s          
  |+++++++++++++++++++++++++++                       | 52% ~10s          
  |+++++++++++++++++++++++++++                       | 53% ~10s          
  |++++++++++++++++++++++++++++                      | 55% ~09s          
  |++++++++++++++++++++++++++++                      | 56% ~09s          
  |+++++++++++++++++++++++++++++                     | 57% ~09s          
  |++++++++++++++++++++++++++++++                    | 58% ~09s          
  |++++++++++++++++++++++++++++++                    | 59% ~08s          
  |+++++++++++++++++++++++++++++++                   | 60% ~08s          
  |+++++++++++++++++++++++++++++++                   | 62% ~08s          
  |++++++++++++++++++++++++++++++++                  | 63% ~08s          
  |++++++++++++++++++++++++++++++++                  | 64% ~07s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~07s          
  |++++++++++++++++++++++++++++++++++                | 66% ~07s          
  |++++++++++++++++++++++++++++++++++                | 67% ~07s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~06s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~06s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~06s          
  |+++++++++++++++++++++++++++++++++++++             | 72% ~06s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~05s          
  |++++++++++++++++++++++++++++++++++++++            | 74% ~05s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~05s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~05s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~04s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~04s          
  |+++++++++++++++++++++++++++++++++++++++++         | 80% ~04s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~04s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~04s          
  |++++++++++++++++++++++++++++++++++++++++++        | 84% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 94% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=20s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~09s          
  |++                                                | 2 % ~10s          
  |++                                                | 4 % ~10s          
  |+++                                               | 5 % ~10s          
  |++++                                              | 6 % ~10s          
  |++++                                              | 7 % ~10s          
  |+++++                                             | 8 % ~10s          
  |+++++                                             | 10% ~10s          
  |++++++                                            | 11% ~10s          
  |+++++++                                           | 12% ~09s          
  |+++++++                                           | 13% ~09s          
  |++++++++                                          | 14% ~09s          
  |++++++++                                          | 16% ~09s          
  |+++++++++                                         | 17% ~09s          
  |++++++++++                                        | 18% ~09s          
  |++++++++++                                        | 19% ~08s          
  |+++++++++++                                       | 20% ~08s          
  |+++++++++++                                       | 22% ~08s          
  |++++++++++++                                      | 23% ~08s          
  |+++++++++++++                                     | 24% ~08s          
  |+++++++++++++                                     | 25% ~08s          
  |++++++++++++++                                    | 27% ~07s          
  |++++++++++++++                                    | 28% ~07s          
  |+++++++++++++++                                   | 29% ~07s          
  |++++++++++++++++                                  | 30% ~07s          
  |++++++++++++++++                                  | 31% ~07s          
  |+++++++++++++++++                                 | 33% ~07s          
  |+++++++++++++++++                                 | 34% ~07s          
  |++++++++++++++++++                                | 35% ~07s          
  |+++++++++++++++++++                               | 36% ~06s          
  |+++++++++++++++++++                               | 37% ~06s          
  |++++++++++++++++++++                              | 39% ~06s          
  |++++++++++++++++++++                              | 40% ~06s          
  |+++++++++++++++++++++                             | 41% ~06s          
  |++++++++++++++++++++++                            | 42% ~06s          
  |++++++++++++++++++++++                            | 43% ~06s          
  |+++++++++++++++++++++++                           | 45% ~06s          
  |+++++++++++++++++++++++                           | 46% ~05s          
  |++++++++++++++++++++++++                          | 47% ~05s          
  |+++++++++++++++++++++++++                         | 48% ~05s          
  |+++++++++++++++++++++++++                         | 49% ~05s          
  |++++++++++++++++++++++++++                        | 51% ~05s          
  |++++++++++++++++++++++++++                        | 52% ~05s          
  |+++++++++++++++++++++++++++                       | 53% ~05s          
  |++++++++++++++++++++++++++++                      | 54% ~05s          
  |++++++++++++++++++++++++++++                      | 55% ~04s          
  |+++++++++++++++++++++++++++++                     | 57% ~04s          
  |+++++++++++++++++++++++++++++                     | 58% ~04s          
  |++++++++++++++++++++++++++++++                    | 59% ~04s          
  |+++++++++++++++++++++++++++++++                   | 60% ~04s          
  |+++++++++++++++++++++++++++++++                   | 61% ~04s          
  |++++++++++++++++++++++++++++++++                  | 63% ~04s          
  |++++++++++++++++++++++++++++++++                  | 64% ~04s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~03s          
  |++++++++++++++++++++++++++++++++++                | 66% ~03s          
  |++++++++++++++++++++++++++++++++++                | 67% ~03s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~03s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~03s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~03s          
  |+++++++++++++++++++++++++++++++++++++             | 72% ~03s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~03s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~02s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~02s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~02s          
  |++++++++++++++++++++++++++++++++++++++++          | 78% ~02s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=10s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~43s          
  |++                                                | 2 % ~44s          
  |++                                                | 3 % ~43s          
  |+++                                               | 4 % ~41s          
  |+++                                               | 5 % ~40s          
  |++++                                              | 6 % ~40s          
  |++++                                              | 7 % ~39s          
  |+++++                                             | 8 % ~39s          
  |+++++                                             | 9 % ~38s          
  |++++++                                            | 11% ~37s          
  |++++++                                            | 12% ~36s          
  |+++++++                                           | 13% ~36s          
  |+++++++                                           | 14% ~35s          
  |++++++++                                          | 15% ~35s          
  |++++++++                                          | 16% ~34s          
  |+++++++++                                         | 17% ~34s          
  |+++++++++                                         | 18% ~33s          
  |++++++++++                                        | 19% ~33s          
  |++++++++++                                        | 20% ~33s          
  |+++++++++++                                       | 21% ~32s          
  |++++++++++++                                      | 22% ~32s          
  |++++++++++++                                      | 23% ~31s          
  |+++++++++++++                                     | 24% ~31s          
  |+++++++++++++                                     | 25% ~30s          
  |++++++++++++++                                    | 26% ~30s          
  |++++++++++++++                                    | 27% ~29s          
  |+++++++++++++++                                   | 28% ~29s          
  |+++++++++++++++                                   | 29% ~29s          
  |++++++++++++++++                                  | 31% ~28s          
  |++++++++++++++++                                  | 32% ~28s          
  |+++++++++++++++++                                 | 33% ~27s          
  |+++++++++++++++++                                 | 34% ~27s          
  |++++++++++++++++++                                | 35% ~27s          
  |++++++++++++++++++                                | 36% ~26s          
  |+++++++++++++++++++                               | 37% ~26s          
  |+++++++++++++++++++                               | 38% ~25s          
  |++++++++++++++++++++                              | 39% ~25s          
  |++++++++++++++++++++                              | 40% ~24s          
  |+++++++++++++++++++++                             | 41% ~24s          
  |++++++++++++++++++++++                            | 42% ~24s          
  |++++++++++++++++++++++                            | 43% ~23s          
  |+++++++++++++++++++++++                           | 44% ~23s          
  |+++++++++++++++++++++++                           | 45% ~22s          
  |++++++++++++++++++++++++                          | 46% ~22s          
  |++++++++++++++++++++++++                          | 47% ~21s          
  |+++++++++++++++++++++++++                         | 48% ~21s          
  |+++++++++++++++++++++++++                         | 49% ~20s          
  |++++++++++++++++++++++++++                        | 51% ~20s          
  |++++++++++++++++++++++++++                        | 52% ~20s          
  |+++++++++++++++++++++++++++                       | 53% ~19s          
  |+++++++++++++++++++++++++++                       | 54% ~19s          
  |++++++++++++++++++++++++++++                      | 55% ~18s          
  |++++++++++++++++++++++++++++                      | 56% ~18s          
  |+++++++++++++++++++++++++++++                     | 57% ~17s          
  |+++++++++++++++++++++++++++++                     | 58% ~17s          
  |++++++++++++++++++++++++++++++                    | 59% ~17s          
  |++++++++++++++++++++++++++++++                    | 60% ~16s          
  |+++++++++++++++++++++++++++++++                   | 61% ~16s          
  |++++++++++++++++++++++++++++++++                  | 62% ~15s          
  |++++++++++++++++++++++++++++++++                  | 63% ~15s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~14s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~14s          
  |++++++++++++++++++++++++++++++++++                | 66% ~14s          
  |++++++++++++++++++++++++++++++++++                | 67% ~13s          
  |+++++++++++++++++++++++++++++++++++               | 68% ~13s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~12s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~12s          
  |++++++++++++++++++++++++++++++++++++              | 72% ~11s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~11s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~11s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~10s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~10s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~09s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~09s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~08s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~08s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~08s          
  |++++++++++++++++++++++++++++++++++++++++++        | 82% ~07s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~07s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~06s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~06s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~05s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~05s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~05s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~04s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~04s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=40s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~10s          
  |++                                                | 2 % ~10s          
  |++                                                | 3 % ~10s          
  |+++                                               | 5 % ~09s          
  |+++                                               | 6 % ~09s          
  |++++                                              | 7 % ~09s          
  |++++                                              | 8 % ~09s          
  |+++++                                             | 9 % ~09s          
  |++++++                                            | 10% ~08s          
  |++++++                                            | 11% ~08s          
  |+++++++                                           | 12% ~08s          
  |+++++++                                           | 14% ~08s          
  |++++++++                                          | 15% ~08s          
  |++++++++                                          | 16% ~08s          
  |+++++++++                                         | 17% ~08s          
  |++++++++++                                        | 18% ~08s          
  |++++++++++                                        | 19% ~08s          
  |+++++++++++                                       | 20% ~08s          
  |+++++++++++                                       | 22% ~07s          
  |++++++++++++                                      | 23% ~07s          
  |++++++++++++                                      | 24% ~07s          
  |+++++++++++++                                     | 25% ~07s          
  |++++++++++++++                                    | 26% ~07s          
  |++++++++++++++                                    | 27% ~07s          
  |+++++++++++++++                                   | 28% ~07s          
  |+++++++++++++++                                   | 30% ~07s          
  |++++++++++++++++                                  | 31% ~07s          
  |++++++++++++++++                                  | 32% ~07s          
  |+++++++++++++++++                                 | 33% ~06s          
  |++++++++++++++++++                                | 34% ~06s          
  |++++++++++++++++++                                | 35% ~06s          
  |+++++++++++++++++++                               | 36% ~06s          
  |+++++++++++++++++++                               | 38% ~06s          
  |++++++++++++++++++++                              | 39% ~06s          
  |++++++++++++++++++++                              | 40% ~06s          
  |+++++++++++++++++++++                             | 41% ~06s          
  |++++++++++++++++++++++                            | 42% ~06s          
  |++++++++++++++++++++++                            | 43% ~06s          
  |+++++++++++++++++++++++                           | 44% ~05s          
  |+++++++++++++++++++++++                           | 45% ~05s          
  |++++++++++++++++++++++++                          | 47% ~05s          
  |++++++++++++++++++++++++                          | 48% ~05s          
  |+++++++++++++++++++++++++                         | 49% ~05s          
  |+++++++++++++++++++++++++                         | 50% ~05s          
  |++++++++++++++++++++++++++                        | 51% ~05s          
  |+++++++++++++++++++++++++++                       | 52% ~05s          
  |+++++++++++++++++++++++++++                       | 53% ~05s          
  |++++++++++++++++++++++++++++                      | 55% ~04s          
  |++++++++++++++++++++++++++++                      | 56% ~04s          
  |+++++++++++++++++++++++++++++                     | 57% ~04s          
  |+++++++++++++++++++++++++++++                     | 58% ~04s          
  |++++++++++++++++++++++++++++++                    | 59% ~04s          
  |+++++++++++++++++++++++++++++++                   | 60% ~04s          
  |+++++++++++++++++++++++++++++++                   | 61% ~04s          
  |++++++++++++++++++++++++++++++++                  | 62% ~04s          
  |++++++++++++++++++++++++++++++++                  | 64% ~04s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~03s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~03s          
  |++++++++++++++++++++++++++++++++++                | 67% ~03s          
  |+++++++++++++++++++++++++++++++++++               | 68% ~03s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~03s          
  |++++++++++++++++++++++++++++++++++++              | 70% ~03s          
  |++++++++++++++++++++++++++++++++++++              | 72% ~03s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~03s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~03s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~02s          
  |+++++++++++++++++++++++++++++++++++++++           | 76% ~02s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~02s          
  |++++++++++++++++++++++++++++++++++++++++          | 78% ~02s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 94% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=10s  
Calculating cluster 7

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~15s          
  |++                                                | 2 % ~14s          
  |++                                                | 3 % ~30s          
  |+++                                               | 4 % ~25s          
  |+++                                               | 5 % ~22s          
  |++++                                              | 6 % ~19s          
  |++++                                              | 7 % ~18s          
  |+++++                                             | 8 % ~16s          
  |+++++                                             | 9 % ~15s          
  |++++++                                            | 11% ~14s          
  |++++++                                            | 12% ~14s          
  |+++++++                                           | 13% ~13s          
  |+++++++                                           | 14% ~13s          
  |++++++++                                          | 15% ~12s          
  |++++++++                                          | 16% ~12s          
  |+++++++++                                         | 17% ~11s          
  |+++++++++                                         | 18% ~11s          
  |++++++++++                                        | 19% ~11s          
  |++++++++++                                        | 20% ~11s          
  |+++++++++++                                       | 21% ~10s          
  |++++++++++++                                      | 22% ~10s          
  |++++++++++++                                      | 23% ~10s          
  |+++++++++++++                                     | 24% ~10s          
  |+++++++++++++                                     | 25% ~09s          
  |++++++++++++++                                    | 26% ~09s          
  |++++++++++++++                                    | 27% ~09s          
  |+++++++++++++++                                   | 28% ~09s          
  |+++++++++++++++                                   | 29% ~09s          
  |++++++++++++++++                                  | 31% ~08s          
  |++++++++++++++++                                  | 32% ~08s          
  |+++++++++++++++++                                 | 33% ~08s          
  |+++++++++++++++++                                 | 34% ~08s          
  |++++++++++++++++++                                | 35% ~08s          
  |++++++++++++++++++                                | 36% ~08s          
  |+++++++++++++++++++                               | 37% ~08s          
  |+++++++++++++++++++                               | 38% ~07s          
  |++++++++++++++++++++                              | 39% ~07s          
  |++++++++++++++++++++                              | 40% ~07s          
  |+++++++++++++++++++++                             | 41% ~07s          
  |++++++++++++++++++++++                            | 42% ~07s          
  |++++++++++++++++++++++                            | 43% ~07s          
  |+++++++++++++++++++++++                           | 44% ~07s          
  |+++++++++++++++++++++++                           | 45% ~06s          
  |++++++++++++++++++++++++                          | 46% ~06s          
  |++++++++++++++++++++++++                          | 47% ~06s          
  |+++++++++++++++++++++++++                         | 48% ~06s          
  |+++++++++++++++++++++++++                         | 49% ~06s          
  |++++++++++++++++++++++++++                        | 51% ~06s          
  |++++++++++++++++++++++++++                        | 52% ~06s          
  |+++++++++++++++++++++++++++                       | 53% ~06s          
  |+++++++++++++++++++++++++++                       | 54% ~05s          
  |++++++++++++++++++++++++++++                      | 55% ~05s          
  |++++++++++++++++++++++++++++                      | 56% ~05s          
  |+++++++++++++++++++++++++++++                     | 57% ~05s          
  |+++++++++++++++++++++++++++++                     | 58% ~05s          
  |++++++++++++++++++++++++++++++                    | 59% ~05s          
  |++++++++++++++++++++++++++++++                    | 60% ~05s          
  |+++++++++++++++++++++++++++++++                   | 61% ~04s          
  |++++++++++++++++++++++++++++++++                  | 62% ~04s          
  |++++++++++++++++++++++++++++++++                  | 63% ~04s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~04s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~04s          
  |++++++++++++++++++++++++++++++++++                | 66% ~04s          
  |++++++++++++++++++++++++++++++++++                | 67% ~04s          
  |+++++++++++++++++++++++++++++++++++               | 68% ~04s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~03s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~03s          
  |++++++++++++++++++++++++++++++++++++              | 72% ~03s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~03s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~03s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~03s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~03s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~03s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~03s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~02s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++        | 82% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=11s  
Calculating cluster 8

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~16s          
  |++                                                | 2 % ~17s          
  |++                                                | 3 % ~17s          
  |+++                                               | 4 % ~16s          
  |+++                                               | 6 % ~16s          
  |++++                                              | 7 % ~16s          
  |++++                                              | 8 % ~16s          
  |+++++                                             | 9 % ~15s          
  |+++++                                             | 10% ~15s          
  |++++++                                            | 11% ~15s          
  |+++++++                                           | 12% ~15s          
  |+++++++                                           | 13% ~15s          
  |++++++++                                          | 14% ~15s          
  |++++++++                                          | 16% ~15s          
  |+++++++++                                         | 17% ~14s          
  |+++++++++                                         | 18% ~14s          
  |++++++++++                                        | 19% ~14s          
  |++++++++++                                        | 20% ~14s          
  |+++++++++++                                       | 21% ~14s          
  |++++++++++++                                      | 22% ~13s          
  |++++++++++++                                      | 23% ~13s          
  |+++++++++++++                                     | 24% ~13s          
  |+++++++++++++                                     | 26% ~13s          
  |++++++++++++++                                    | 27% ~13s          
  |++++++++++++++                                    | 28% ~12s          
  |+++++++++++++++                                   | 29% ~12s          
  |+++++++++++++++                                   | 30% ~12s          
  |++++++++++++++++                                  | 31% ~12s          
  |+++++++++++++++++                                 | 32% ~12s          
  |+++++++++++++++++                                 | 33% ~11s          
  |++++++++++++++++++                                | 34% ~11s          
  |++++++++++++++++++                                | 36% ~11s          
  |+++++++++++++++++++                               | 37% ~11s          
  |+++++++++++++++++++                               | 38% ~11s          
  |++++++++++++++++++++                              | 39% ~10s          
  |++++++++++++++++++++                              | 40% ~10s          
  |+++++++++++++++++++++                             | 41% ~10s          
  |++++++++++++++++++++++                            | 42% ~10s          
  |++++++++++++++++++++++                            | 43% ~10s          
  |+++++++++++++++++++++++                           | 44% ~10s          
  |+++++++++++++++++++++++                           | 46% ~09s          
  |++++++++++++++++++++++++                          | 47% ~09s          
  |++++++++++++++++++++++++                          | 48% ~09s          
  |+++++++++++++++++++++++++                         | 49% ~09s          
  |+++++++++++++++++++++++++                         | 50% ~09s          
  |++++++++++++++++++++++++++                        | 51% ~08s          
  |+++++++++++++++++++++++++++                       | 52% ~08s          
  |+++++++++++++++++++++++++++                       | 53% ~08s          
  |++++++++++++++++++++++++++++                      | 54% ~08s          
  |++++++++++++++++++++++++++++                      | 56% ~08s          
  |+++++++++++++++++++++++++++++                     | 57% ~07s          
  |+++++++++++++++++++++++++++++                     | 58% ~07s          
  |++++++++++++++++++++++++++++++                    | 59% ~07s          
  |++++++++++++++++++++++++++++++                    | 60% ~07s          
  |+++++++++++++++++++++++++++++++                   | 61% ~07s          
  |++++++++++++++++++++++++++++++++                  | 62% ~06s          
  |++++++++++++++++++++++++++++++++                  | 63% ~06s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~06s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~06s          
  |++++++++++++++++++++++++++++++++++                | 67% ~06s          
  |++++++++++++++++++++++++++++++++++                | 68% ~06s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~05s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~05s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~05s          
  |+++++++++++++++++++++++++++++++++++++             | 72% ~05s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~05s          
  |++++++++++++++++++++++++++++++++++++++            | 74% ~04s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~04s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~04s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~04s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~04s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++        | 82% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 94% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=17s  
Calculating cluster 9

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~10s          
  |++                                                | 2 % ~08s          
  |++                                                | 4 % ~08s          
  |+++                                               | 5 % ~08s          
  |++++                                              | 6 % ~08s          
  |++++                                              | 8 % ~08s          
  |+++++                                             | 9 % ~07s          
  |+++++                                             | 10% ~07s          
  |++++++                                            | 11% ~07s          
  |+++++++                                           | 12% ~07s          
  |+++++++                                           | 14% ~07s          
  |++++++++                                          | 15% ~07s          
  |+++++++++                                         | 16% ~06s          
  |+++++++++                                         | 18% ~06s          
  |++++++++++                                        | 19% ~06s          
  |++++++++++                                        | 20% ~06s          
  |+++++++++++                                       | 21% ~06s          
  |++++++++++++                                      | 22% ~06s          
  |++++++++++++                                      | 24% ~06s          
  |+++++++++++++                                     | 25% ~06s          
  |++++++++++++++                                    | 26% ~06s          
  |++++++++++++++                                    | 28% ~06s          
  |+++++++++++++++                                   | 29% ~05s          
  |+++++++++++++++                                   | 30% ~05s          
  |++++++++++++++++                                  | 31% ~05s          
  |+++++++++++++++++                                 | 32% ~05s          
  |+++++++++++++++++                                 | 34% ~05s          
  |++++++++++++++++++                                | 35% ~05s          
  |+++++++++++++++++++                               | 36% ~05s          
  |+++++++++++++++++++                               | 38% ~05s          
  |++++++++++++++++++++                              | 39% ~05s          
  |++++++++++++++++++++                              | 40% ~05s          
  |+++++++++++++++++++++                             | 41% ~05s          
  |++++++++++++++++++++++                            | 42% ~05s          
  |++++++++++++++++++++++                            | 44% ~04s          
  |+++++++++++++++++++++++                           | 45% ~04s          
  |++++++++++++++++++++++++                          | 46% ~04s          
  |++++++++++++++++++++++++                          | 48% ~04s          
  |+++++++++++++++++++++++++                         | 49% ~04s          
  |+++++++++++++++++++++++++                         | 50% ~04s          
  |++++++++++++++++++++++++++                        | 51% ~04s          
  |+++++++++++++++++++++++++++                       | 52% ~04s          
  |+++++++++++++++++++++++++++                       | 54% ~04s          
  |++++++++++++++++++++++++++++                      | 55% ~04s          
  |+++++++++++++++++++++++++++++                     | 56% ~04s          
  |+++++++++++++++++++++++++++++                     | 58% ~03s          
  |++++++++++++++++++++++++++++++                    | 59% ~03s          
  |++++++++++++++++++++++++++++++                    | 60% ~03s          
  |+++++++++++++++++++++++++++++++                   | 61% ~03s          
  |++++++++++++++++++++++++++++++++                  | 62% ~03s          
  |++++++++++++++++++++++++++++++++                  | 64% ~03s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~03s          
  |++++++++++++++++++++++++++++++++++                | 66% ~03s          
  |++++++++++++++++++++++++++++++++++                | 68% ~03s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~03s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~02s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~02s          
  |+++++++++++++++++++++++++++++++++++++             | 72% ~02s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~02s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~02s          
  |+++++++++++++++++++++++++++++++++++++++           | 76% ~02s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~02s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~02s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++        | 82% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 84% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=08s  
Calculating cluster 10

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~26s          
  |++                                                | 2 % ~28s          
  |++                                                | 3 % ~26s          
  |+++                                               | 4 % ~26s          
  |+++                                               | 5 % ~25s          
  |++++                                              | 6 % ~24s          
  |++++                                              | 7 % ~24s          
  |+++++                                             | 9 % ~24s          
  |+++++                                             | 10% ~23s          
  |++++++                                            | 11% ~23s          
  |++++++                                            | 12% ~22s          
  |+++++++                                           | 13% ~22s          
  |+++++++                                           | 14% ~22s          
  |++++++++                                          | 15% ~22s          
  |++++++++                                          | 16% ~22s          
  |+++++++++                                         | 17% ~22s          
  |++++++++++                                        | 18% ~21s          
  |++++++++++                                        | 19% ~21s          
  |+++++++++++                                       | 20% ~21s          
  |+++++++++++                                       | 21% ~21s          
  |++++++++++++                                      | 22% ~21s          
  |++++++++++++                                      | 23% ~21s          
  |+++++++++++++                                     | 24% ~20s          
  |+++++++++++++                                     | 26% ~20s          
  |++++++++++++++                                    | 27% ~20s          
  |++++++++++++++                                    | 28% ~21s          
  |+++++++++++++++                                   | 29% ~21s          
  |+++++++++++++++                                   | 30% ~20s          
  |++++++++++++++++                                  | 31% ~20s          
  |++++++++++++++++                                  | 32% ~20s          
  |+++++++++++++++++                                 | 33% ~19s          
  |++++++++++++++++++                                | 34% ~19s          
  |++++++++++++++++++                                | 35% ~19s          
  |+++++++++++++++++++                               | 36% ~18s          
  |+++++++++++++++++++                               | 37% ~18s          
  |++++++++++++++++++++                              | 38% ~18s          
  |++++++++++++++++++++                              | 39% ~17s          
  |+++++++++++++++++++++                             | 40% ~17s          
  |+++++++++++++++++++++                             | 41% ~17s          
  |++++++++++++++++++++++                            | 43% ~16s          
  |++++++++++++++++++++++                            | 44% ~16s          
  |+++++++++++++++++++++++                           | 45% ~16s          
  |+++++++++++++++++++++++                           | 46% ~15s          
  |++++++++++++++++++++++++                          | 47% ~15s          
  |++++++++++++++++++++++++                          | 48% ~15s          
  |+++++++++++++++++++++++++                         | 49% ~14s          
  |+++++++++++++++++++++++++                         | 50% ~14s          
  |++++++++++++++++++++++++++                        | 51% ~14s          
  |+++++++++++++++++++++++++++                       | 52% ~14s          
  |+++++++++++++++++++++++++++                       | 53% ~13s          
  |++++++++++++++++++++++++++++                      | 54% ~13s          
  |++++++++++++++++++++++++++++                      | 55% ~13s          
  |+++++++++++++++++++++++++++++                     | 56% ~12s          
  |+++++++++++++++++++++++++++++                     | 57% ~12s          
  |++++++++++++++++++++++++++++++                    | 59% ~12s          
  |++++++++++++++++++++++++++++++                    | 60% ~11s          
  |+++++++++++++++++++++++++++++++                   | 61% ~11s          
  |+++++++++++++++++++++++++++++++                   | 62% ~11s          
  |++++++++++++++++++++++++++++++++                  | 63% ~10s          
  |++++++++++++++++++++++++++++++++                  | 64% ~10s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~10s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~09s          
  |++++++++++++++++++++++++++++++++++                | 67% ~09s          
  |+++++++++++++++++++++++++++++++++++               | 68% ~09s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~09s          
  |++++++++++++++++++++++++++++++++++++              | 70% ~08s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~08s          
  |+++++++++++++++++++++++++++++++++++++             | 72% ~08s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~07s          
  |++++++++++++++++++++++++++++++++++++++            | 74% ~07s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~07s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~07s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~06s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~06s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~06s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~05s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~05s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~05s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~04s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~04s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~04s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~04s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~03s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~03s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=27s  

Have a look at the top cluster markers

head(ClusterMarkers)
top5 <- ClusterMarkers %>% group_by(cluster) %>% top_n(n=5, wt =avg_log2FC)

top2 <- ClusterMarkers %>% group_by(cluster) %>% top_n(n=2, wt =avg_log2FC)
DoHeatmap(seu, features = top5$gene, size = 3, angle = 90, group.by = "RNA_snn_res.0.6")


DoHeatmap(seu, features = top2$gene, size = 3, angle = 90, group.by = "RNA_snn_res.0.6")

Now use EnrichR to check cell type libraries

setEnrichrSite("Enrichr") # Human genes
Connection changed to https://maayanlab.cloud/Enrichr/
Connection is Live!
# list of all the databases

dbs <- listEnrichrDbs()

# this will list the possible libraries
dbs

# select libraries with cell types
db <- c('CellMarker_Augmented_2021','Azimuth_Cell_Types_2021')

# function for a quick look
checkCelltypes <- function(cluster_num = 0){
  clusterX <- ClusterMarkers %>% filter(cluster == cluster_num & avg_log2FC > 0.25)
  genes <- clusterX$gene
  # the cell type libraries
  # get the results for each library
  clusterX.cell <- enrichr(genes, databases = db)
  # visualize the results
print(plotEnrich(clusterX.cell[[1]], showTerms = 20, numChar = 40, y = "Count", orderBy = "P.value", title = 'CellMarker_Augmented_2021'))
print(plotEnrich(clusterX.cell[[2]], showTerms = 20, numChar = 40, y = "Count", orderBy = "P.value", title = 'Azimuth_Cell_Types_2021'))

}

Check each cluster

cluster0 <- checkCelltypes(cluster_num = 0)
Uploading data to Enrichr... Done.
  Querying CellMarker_Augmented_2021... Done.
  Querying Azimuth_Cell_Types_2021... Done.
Parsing results... Done.

cluster1 <- checkCelltypes(cluster_num = 1)
Uploading data to Enrichr... Done.
  Querying CellMarker_Augmented_2021... Done.
  Querying Azimuth_Cell_Types_2021... Done.
Parsing results... Done.

cluster2 <- checkCelltypes(cluster_num = 2)
Uploading data to Enrichr... Done.
  Querying CellMarker_Augmented_2021... Done.
  Querying Azimuth_Cell_Types_2021... Done.
Parsing results... Done.

cluster3 <- checkCelltypes(cluster_num = 3)
Uploading data to Enrichr... Done.
  Querying CellMarker_Augmented_2021... Done.
  Querying Azimuth_Cell_Types_2021... Done.
Parsing results... Done.

cluster4 <- checkCelltypes(cluster_num = 4)
Uploading data to Enrichr... Done.
  Querying CellMarker_Augmented_2021... Done.
  Querying Azimuth_Cell_Types_2021... Done.
Parsing results... Done.

cluster5 <- checkCelltypes(cluster_num = 5)
Uploading data to Enrichr... Done.
  Querying CellMarker_Augmented_2021... Done.
  Querying Azimuth_Cell_Types_2021... Done.
Parsing results... Done.

cluster6 <- checkCelltypes(cluster_num = 6)
Uploading data to Enrichr... Done.
  Querying CellMarker_Augmented_2021... Done.
  Querying Azimuth_Cell_Types_2021... Done.
Parsing results... Done.

cluster7 <- checkCelltypes(cluster_num = 7)
Uploading data to Enrichr... Done.
  Querying CellMarker_Augmented_2021... Done.
  Querying Azimuth_Cell_Types_2021... Done.
Parsing results... Done.

cluster8 <- checkCelltypes(cluster_num = 8)
Uploading data to Enrichr... Done.
  Querying CellMarker_Augmented_2021... Done.
  Querying Azimuth_Cell_Types_2021... Done.
Parsing results... Done.

cluster9 <- checkCelltypes(cluster_num = 9)
Uploading data to Enrichr... Done.
  Querying CellMarker_Augmented_2021... Done.
  Querying Azimuth_Cell_Types_2021... Done.
Parsing results... Done.

cluster10 <- checkCelltypes(cluster_num = 10)
Uploading data to Enrichr... Done.
  Querying CellMarker_Augmented_2021... Done.
  Querying Azimuth_Cell_Types_2021... Done.
Parsing results... Done.

Add cell type annotations

See cell counts for each line and cell type


Idents(seu) <- "souporcell_status"
table(seu$souporcell_status)

   doublet    singlet unassigned 
      1820      13603         50 
singlet <- subset(seu, idents = "singlet")
VlnPlot(singlet, features = "nFeature_RNA", group.by = "souporcell_assignment")


Idents(singlet)<- "MainCelltypes"
DimPlot(singlet, group.by = "souporcell_assignment", label = TRUE)

We might need to separate and harmonize each cell type.

for (i in 1:length(sublist)){
  sublist[[i]] <- NormalizeData(sublist[[i]], verbose = FALSE)
  sublist[[i]] <- FindVariableFeatures(sublist[[i]], selection.method = "vst")
}
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
integrated_seurat <- IntegrateData(anchorset = int.anchors,  dims = 1:30, k.weight = 72)
Merging dataset 12 into 4
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Merging dataset 5 into 4 12
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Merging dataset 11 into 9
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Merging dataset 8 into 7
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Merging dataset 6 into 1
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Merging dataset 10 into 3
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Merging dataset 2 into 3 10
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Merging dataset 9 11 into 7 8
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Merging dataset 3 10 2 into 1 6
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Merging dataset 4 12 5 into 7 8 9 11
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
Merging dataset 7 8 9 11 4 12 5 into 1 6 3 10 2
Extracting anchors for merged samples
Finding integration vectors
Finding integration vector weights
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Integrating data
integrated_seurat <- RunUMAP(integrated_seurat, reduction = "pca", dims = 1:20, n.neighbors = 81)
16:42:59 UMAP embedding parameters a = 0.9922 b = 1.112
16:42:59 Read 16442 rows and found 20 numeric columns
16:42:59 Using Annoy for neighbor search, n_neighbors = 81
16:42:59 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
16:43:01 Writing NN index file to temp file /var/folders/k4/khtkczkd5tn732ftjpwgtr240000gn/T//Rtmp0peLrn/file761314265441
16:43:01 Searching Annoy index using 1 thread, search_k = 8100
16:43:12 Annoy recall = 100%
16:43:15 Commencing smooth kNN distance calibration using 1 thread with target n_neighbors = 81
16:43:20 Initializing from normalized Laplacian + noise (using irlba)
16:43:21 Commencing optimization for 200 epochs, with 1655996 positive edges
Using method 'umap'
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
16:43:39 Optimization finished
output_path <- "/Users/rhalenathomas/Documents/Data/scRNAseq/ADHD_ZNZ_Mcgill/"

saveRDS(integrated_seurat,paste(output_path,"IntegratedSeuratGraphs.RDS",sep = ""))

integrated_seurat <- FindNeighbors(integrated_seurat, dims = 1:20, k.param = 81)
Computing nearest neighbor graph
Computing SNN
integrated_seurat <- FindClusters(integrated_seurat, resolution = c(0.6,1) )
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 16442
Number of edges: 2500751

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.8712
Number of communities: 13
Elapsed time: 8 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 16442
Number of edges: 2500751

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.8310
Number of communities: 16
Elapsed time: 8 seconds
DimPlot(integrated_seurat, group.by = "orig.ident")

#integrated_seurat$integrated_snn_res.0.6
DimPlot(integrated_seurat, group.by = "integrated_snn_res.0.6", label=TRUE)

DimPlot(integrated_seurat, group.by = "integrated_snn_res.1", label = TRUE)

Now cells per cluster

table(integrated_seurat$integrated_snn_res.0.6, integrated_seurat$orig.ident)
    
        0    1   10   11   12    3    4    5    6    7    8    9
  0   215  124   69 1160  349  467    6   26   35  191   68  224
  1    82  122   36  994  249  173    1    8   23  156   65  209
  2    86  103   21  728  211  360   10   17   23   86   90  177
  3   102   91   43  696  290  224    9   31   31  122   71  133
  4   155  350   27   12  430   36   21   45  115   52  124  378
  5    79   82   44  670  222  244    3   13   31  103   37  132
  6    90    8   24  648   37  134   12   12   10  151   12    5
  7   108   10   21  624   23  104    4    8    5   95   18   13
  8    82   30   35  226   83  176    3    7   21   97   23   28
  9    10   21   45    4  263   30   10   33   45   33   14   21
  10    6   28    9   52   80   29    6   18    9    8   18   36
  11    1    0    0    6   63  182    4    3    0    0    0    1
  12    5    2    0    6   56    6    3   11    0    2    8   56
table(integrated_seurat$integrated_snn_res.1, integrated_seurat$orig.ident)
    
        0    1   10   11   12    3    4    5    6    7    8    9
  0   185  114   63 1022  304  424    5   21   33  172   54  202
  1   131   95   49  816  316  259   10   33   32  140   82  147
  2    86  101   22  712  211  357   10   18   22   84   94  177
  3    79   85   44  672  221  247    2   13   30  104   38  132
  4    48  109   17  606  205  147    1    7   17   56   49  205
  5    90    8   24  648   37  134   12   12   10  151   12    5
  6   108   10   21  632   23  105    5    8    5   95   19   13
  7     7  169    2   10  352    7   12   31   41    6   45  212
  8   148  188   25    4   94   29    9   16   75   47   81  175
  9    35   11   18  402   46   24    0    2    6  100   11    4
  10   10   21   45    4  262   30   10   32   47   33   14   19
  11   58   10   29   68   21  146    1    5   14   70    5    7
  12   24   20    6  162   62   29    2    2    7   28   18   21
  13    6   28    9   56   82   29    6   18    9    8   18   36
  14    1    0    0    6   63  192    4    3    0    0    0    1
  15    5    2    0    6   57    6    3   11    0    2    8   57

Which cells match to which subject?

From Michaels correlation:

5+5
[1] 10

unique(seu$Genotype_ID)
 [1] "28_CH79DIVUZHD100462"          "22_CH47DIVUZHD100456"         
 [3] "4_CH96GSAUZHD100576"           "19_CH31DIVUZHD100453"         
 [5] "unassigned"                    "29_CH52DIVUZHD100463"         
 [7] "saliva_mr-023__saliva_mr-023_" "23_CH20DIVUZHD100457"         
 [9] "32_CH97GSAUZHD100946"          "3_CH26GSAUZHD100575"          

Now make a table of the assigned cell counts

table(seu$souporcell_assignment, seu$Genotype_ID)
    
     19_CH31DIVUZHD100453 22_CH47DIVUZHD100456 23_CH20DIVUZHD100457
  0                     0                 1021                    0
  1                     0                    0                  971
  10                    0                    0                    0
  11                    0                    0                    0
  12                 2356                    0                    0
  3                     0                    0                    0
  4                     0                    0                    0
  5                     0                    0                    0
  6                     0                    0                    0
  7                     0                    0                    0
  8                     0                    0                    0
  9                     0                    0                    0
    
     28_CH79DIVUZHD100462 29_CH52DIVUZHD100463 3_CH26GSAUZHD100575
  0                     0                    0                   0
  1                     0                    0                   0
  10                    0                    0                   0
  11                 5826                    0                   0
  12                    0                    0                   0
  3                     0                    0                   0
  4                     0                    0                   0
  5                     0                    0                   0
  6                     0                    0                 348
  7                     0                 1096                   0
  8                     0                    0                   0
  9                     0                    0                   0
    
     32_CH97GSAUZHD100946 4_CH96GSAUZHD100576 saliva_mr-023__saliva_mr-023_
  0                     0                   0                             0
  1                     0                   0                             0
  10                  374                   0                             0
  11                    0                   0                             0
  12                    0                   0                             0
  3                     0                2165                             0
  4                     0                   0                             0
  5                     0                   0                             0
  6                     0                   0                             0
  7                     0                   0                             0
  8                     0                   0                             0
  9                     0                   0                          1413
    
     unassigned
  0           0
  1           0
  10          0
  11          0
  12          0
  3           0
  4          92
  5         232
  6           0
  7           0
  8         548
  9           0
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKUXVpY2sgY2hlY2sgb2YgdGhlIGZpcnN0IG5vLWdlbmV0aWMgZGF0YSBkZW11bHRpcGxleCBzZXF1ZW5jaW5nIGZyb20gdGhlIHBpbG90LgpOUENzCgpgYGB7cn0KbGlicmFyeShTZXVyYXQpCmxpYnJhcnkodGlkeXZlcnNlKQojbGlicmFyeShEb3VibGV0RmluZGVyKQpsaWJyYXJ5KGVucmljaFIpCmxpYnJhcnkoY2x1c3RyZWUpCiNsaWJyYXJ5KCJzY0NsYXNzaWZ5IikKI2xpYnJhcnkoU2luZ2xlQ2VsbEV4cGVyaW1lbnQpCiNsaWJyYXJ5KCJNYXRyaXgiKQoKCmBgYApSZWFkIGluIHRoZSBkYXRhCgpgYGB7cn0Kc2V1IDwtIHJlYWRSRFMoIi9Vc2Vycy9yaGFsZW5hdGhvbWFzL0RvY3VtZW50cy9EYXRhL3NjUk5Bc2VxL0FESERfWk5aX01jZ2lsbC9zZXVfc291cG9yY2VsbF9BREhELnJkcyIpCmNvbG5hbWVzKHNldUBtZXRhLmRhdGEpCgp1bmlxdWUoc2V1JG9yaWcuaWRlbnQpCnVuaXF1ZShzZXUkc291cG9yY2VsbF9hc3NpZ25tZW50KQp1bmlxdWUoc2V1JHNvdXBvcmNlbGxfc3RhdHVzKQpkaW0oc2V1KQoKCmBgYAoKYGBge3J9Cgp0YWJsZShzZXUkc291cG9yY2VsbF9hc3NpZ25tZW50KQoKYGBgCgpMb29rIGF0IHRoZSBzZXF1ZW5jaW5nCgpgYGB7cn0KClZsblBsb3Qoc2V1LCBmZWF0dXJlcyA9IGMoIm5Db3VudF9STkEiLCJuRmVhdHVyZV9STkEiKSwgcHQuc2l6ZSA9IDAuMDAxKQpWbG5QbG90KHNldSwgZmVhdHVyZXMgPSBjKCJuRmVhdHVyZV9STkEiKSwgcHQuc2l6ZSA9IDAuMDAxLCB5Lm1heCA9IDUwMCkKCmBgYAoKYGBge3J9Cgp0YWJsZShzZXUkc291cG9yY2VsbF9zdGF0dXMpCmRpbShzZXUpCgoKYGBgCgoKCgpDYWxjdWxhdGUgdGhlIHBlcmNlbnQgbWl0b2Nob25kcmlhbCBnZW5lcwpgYGB7cn0Kc2V1IDwtIFBlcmNlbnRhZ2VGZWF0dXJlU2V0KHNldSwgcGF0dGVybiA9ICJeTVQtIiwgY29sLm5hbWUgPSAicGVyY2VudC5NVCIpCnNldSRwZXJjZW50Lk1UICU+JSBzdW1tYXJ5CgpWbG5QbG90KHNldSwgZmVhdHVyZXMgPSAicGVyY2VudC5NVCIsIHB0LnNpemUgPSAwLjAwMSkKVmxuUGxvdChzZXUsIGZlYXR1cmVzID0gInBlcmNlbnQuTVQiLCBwdC5zaXplID0gMC4wMDEsIHkubWF4ID0gMjApCgoKYGBgCkknbGwgdXNlIDEwJSBhcyBhIGN1dG9mZiBhbmQgY2hlY2sgaWYgdGhpcyByZW1vdmVzIG1vcmUgb2YgdGhlIGxvdyByZWFkIGNlbGxzLiBJIGJlbGlldmUgdGhpcyBvYmplY3QgaXMgYWxyZWFkeSB0aGUgQ2VsbFJhbmdlciBGaWx0ZXJlZCBvYmplY3QuIAoKYGBge3J9CiNSZW1vdmUgYW55IGNlbGxzIHdpdGggbW9yZSB0aGFuIDEwJSBtaXRvY2hvbmRyaWFsIGNvdW50cwpzZXUuZnQgPC0gc3Vic2V0KHNldSwgcGVyY2VudC5NVCA8IDEwKQpkaW0oc2V1KQpkaW0oc2V1LmZ0KQoKIyByZW1vdmVkIDY1NiBjZWxscwpWbG5QbG90KHNldS5mdCwgZmVhdHVyZXMgPSBjKCJuQ291bnRfUk5BIiwibkZlYXR1cmVfUk5BIiwicGVyY2VudC5NVCIpLCBwdC5zaXplID0gMC4wMDEpCgoKYGBgCgpgYGB7cn0KIyBoYXZlIGEgbG9vayBhdCBob3cgdGhlIGNvdW50cyBhbmQgUk5BIGFyZSBkaXN0cmlidXRlZCBhY3Jvc3Mgc2luZ2xlLCBkb3VibGV0LCB1bmFzc2lnbmVkCgpWbG5QbG90KHNldSwgZmVhdHVyZXMgPSBjKCJuQ291bnRfUk5BIiwibkZlYXR1cmVfUk5BIiksIGdyb3VwLmJ5ID0gInNvdXBvcmNlbGxfc3RhdHVzIikKIyBzZWUgbW9zdCBvZiB0aGUgdW5hc3NpZ25lZCBoYXZlIGxvdyBjb3VudHMgYW5kIGZlYXR1cmVzIGFuZCBkb3VibGV0cyBoYXZlIGhpZ2hlciBjb3VudHMgYW5kIGhpZ2hlciBmZWF0dXJlcwoKVmxuUGxvdChzZXUsIGZlYXR1cmVzID0gYygibkNvdW50X1JOQSIpLCBncm91cC5ieSA9ICJzb3Vwb3JjZWxsX3N0YXR1cyIsIHkubWF4ID0gNTAwMCkKVmxuUGxvdChzZXUsIGZlYXR1cmVzID0gYygibkZlYXR1cmVfUk5BIiksIGdyb3VwLmJ5ID0gInNvdXBvcmNlbGxfc3RhdHVzIiwgeS5tYXggPSAyMDAwKQoKYGBgCkkgd2lsbCBmaWx0ZXIgZm9yIGhpZ2hlciBjb3VudHMgYW5kIGxvd2VyIGNvdW50cwoKCmBgYHtyfQojIENvdW50cyA+IDIwMDAgdG8gZ2V0IHJpZGUgb2YgdW5hc3NpZ25lZAojIFJOQSA+IDMwMAojIGRvdWJsZXRzIHdlIG1pZ2h0IGp1c3QgcmVtb3ZlIGJ5IHRoZSBhc3NpZ25tZW50IG9yIHVzZSBkb3VibGV0IGZpbmRlciBsYXRlcgoKc2V1LmZ0MiA8LSBzdWJzZXQoc2V1LmZ0LCBuQ291bnRfUk5BID4gMjAwMCAmIG5GZWF0dXJlX1JOQSA+IDMwMCkKZGltKHNldSkKZGltKHNldS5mdCkKZGltKHNldS5mdDIpCiMgdGhpcyByZW1vdmVzIDEzOTEgCgpWbG5QbG90KHNldS5mdDIsIGZlYXR1cmVzID0gYygibkNvdW50X1JOQSIsIm5GZWF0dXJlX1JOQSIsInBlcmNlbnQuTVQiKSwgcHQuc2l6ZSA9IDAuMDAxKQoKIyBob3cgbWFueSBvZiBlYWNoIGxpbmUgZG8gd2UgZGV0ZWN0Cgp0YWJsZShzZXUuZnQyJHNvdXBvcmNlbGxfYXNzaWdubWVudCkKVmxuUGxvdChzZXUuZnQyLCBmZWF0dXJlcyA9IGMoIm5Db3VudF9STkEiLCJuRmVhdHVyZV9STkEiLCJwZXJjZW50Lk1UIiksIGdyb3VwLmJ5ID0gInNvdXBvcmNlbGxfYXNzaWdubWVudCIsIHB0LnNpemUgPSAwLjAwMSkKCgpgYGAKY2xlYW4gdXAKCmBgYHtyfQoKc2V1IDwtIHNldS5mdDIKcm0oc2V1LmZ0Miwgc2V1LmZ0KQoKYGBgCgpOb3cgdGhlIHdvcmtmbG93IHRvIG1ha2UgY2x1c3RlcnMKYGBge3J9CnNldSA8LSBOb3JtYWxpemVEYXRhKHNldSwgbm9ybWFsaXphdGlvbi5tZXRob2QgPSAiTG9nTm9ybWFsaXplIiwgc2NhbGUuZmFjdG9yID0gMTAwMDApCnNldSA8LSBGaW5kVmFyaWFibGVGZWF0dXJlcyhzZXUsIHNlbGVjdGlvbi5tZXRob2QgPSAidnN0IiwgbmZlYXR1cmVzID0gMjUwMCkKCnZhciAgPC0gVmFyaWFibGVGZWF0dXJlcyhzZXUpCnRvcDEwIDwtIHZhclsxOjEwXQoKcDEgPC0gVmFyaWFibGVGZWF0dXJlUGxvdChzZXUpIApwMiA8LSBMYWJlbFBvaW50cyhwbG90ID0gcDEsIHBvaW50cyA9IHRvcDEwLCByZXBlbCA9IFRSVUUpCnAyCgoKCmBgYApTY2FsZSBhbmQgZ2V0IFBDQQoKYGBge3J9CgoKI0xpbmVhciBkaW1lbnNpb25hbGl0eSByZWR1Y3Rpb24KI0Nob29zaW5nIHRoZSBudW1iZXIgb2YgUENzIGNhbiBkZXBlbmQgb24gaG93IG1hbnkgY2VsbHMgeW91IGhhdmUKc2V1IDwtIFNjYWxlRGF0YShzZXUpCnNldSA8LSBSdW5QQ0Eoc2V1LCBhc3NheSA9ICJSTkEiLCBucGNzID0gMzApCgpQQ0FQbG90KHNldSkKCiNBc3Nlc3MgaG93IG1hbnkgUENzIGNhcHR1cmUgbW9zdCBvZiB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIGRhdGEgCkVsYm93UGxvdChzZXUsIG5kaW1zID0gMzApCgpgYGAKCjIwIFBDcyBhcmUgZ29vZCBub3cgbWFrZSB0aGUgVU1BUAoKYGBge3J9CgpzZXUgPC0gUnVuVU1BUChzZXUsIGRpbXMgPSAxOjIwLCBuLm5laWdoYm9ycyA9IDEyMSkKRGltUGxvdChzZXUsIGdyb3VwLmJ5ID0gIm9yaWcuaWRlbnQiKQoKYGBgCgpGaW5kIGNsdXN0ZXJzCgpgYGB7cn0KCnNldSA8LSBGaW5kTmVpZ2hib3JzKHNldSwgZGltcyA9IDE6MjAsIGsucGFyYW0gPSAxMjEpCiMgdGhlIG51bWJlciBvZiBjbHVzdGVycyBpcyBkZXBlbmRlbnQgb24gdGhlIHJlc29sdXRpb24gYSBudW1iZXIgZnJvbSAwLTIuIAojIEhpZ2hlciB2YWx1ZXMgbWFrZSBtb3JlIGNsdXN0ZXJzCiMgd2UgaW5jbHVkZSAKc2V1IDwtIEZpbmRDbHVzdGVycyhzZXUsIHJlc29sdXRpb24gPSBjKDAsMC4wNSwwLjI1LDAuNCwwLjUsMC42LDEsMS41KSApCgojIHdlIGNhbiB2aXN1YWxpemUgd2hpY2ggY2VsbHMgYXJlIGdyb3VwZWQgdG9nZXRoZXIgYXQgZGlmZmVyZW50IHJlc29sdXRpb25zIHVzaW5nIGNsdXN0cmVlCgpjbHVzdHJlZShzZXUsIHByZWZpeCA9ICJSTkFfc25uX3Jlcy4iKQoKIyAwLjYgbG9va3MgZ29vZCB0byBhbm5vdGF0ZS4gIEVhY2ggY2x1c3RlciBpcyBzcGxpdHRpbmcgYXBhcnQgdXAgdG8gdGhpcyBwb2ludCBhbmQgdGhlbiB0aGUgY2VsbHMgc3RhcnQgbWVyZ2luZyBhbmQgY2hhbmdpbmcgY2x1c3RlcnMuCgpgYGAKVmlzdWFsaXplCgpgYGB7cn0KRGltUGxvdChzZXUsIGdyb3VwLmJ5ID0gIlJOQV9zbm5fcmVzLjAuNiIsIGxhYmVsID0gVFJVRSkKRGltUGxvdChzZXUsIGdyb3VwLmJ5ID0gIlJOQV9zbm5fcmVzLjEiLCBsYWJlbCA9IFRSVUUpCiMgY2x1c3RlcmluZyBjb3VsZCBiZSBpbXByb3ZlZAoKYGBgCgpMb29rIGF0IGV4cHJlc3Npb24gcHJvZmlsZXMgb2Yga25vd24gY2VsbCB0eXBlIG1hcmtlcnMKCmBgYHtyfQoKCmRhX25ldXJvbnMgPC0gYygiVEgiLCJTTEM2QTMiLCJTTEMxOEEyIiwiU09YNiIsIk5ETkYiLCJTTkNHIiwiQUxESDFBMSIsIkNBTEIxIiwiVEFDUjIiLCJTTEMxN0E2IiwiU0xDMzJBMSIsIk9UWDIiLCJHUlAiLCJMUEwiLCJDQ0siLCJWSVAiKQpOUENfb3JTdGVtTGlrZSA8LSBjKCJEQ1giLCJORVVST0QxIiwiVEJSMSIsIlBDTkEiLCJNS0k2NyIsIlNPWDIiLCJORVMiLCJQQVg2IiwiTUFTSDEiKQptYXR1cmVfbmV1cm9ucyA9IGMoIlJCRk9YMyIsIlNZUCIsIkRMRzQ1IiwiVkFNUDEiLCJWQU1QMiIsIlRVQkIzIiwiU1lUMSIsIkJTTiIsIkhPTUVSMSIsIlNMQzE3QTYiKQpleGNpdGF0b3J5X25ldXJvbnMgPSBjKCJHUklBMiIsIkdSSUExIiwiR1JJQTQiLCJHUklOMSIsIkdSSU4yQiIsIkdSSU4yQSIsIkdSSU4zQSIsIkdSSU4zIiwiR1JJUDEiLCJDQU1LMkEiKQppbmhiaXRvcnlfbmV1cm9ucyA9IGluaCA9IGMoIkdBRDEiLCJHQUQyIiwgIkdBVDEiLCJQVkFMQiIsIkdBQlIyIiwiR0FCUjEiLCJHQlJSMSIsIkdBQlJCMiIsIkdBQlJCMSIsIkdBQlJCMyIsIkdBQlJBNiIsIkdBQlJBMSIsIkdBQlJBNCIsIlRSQUsyIikKYXN0cm9jeXRlcyA8LSBjKCJHRkFQIiwiUzEwMEIiLCJBUVA0IiwiQVBPRSIsICJTT1g5IiwiU0xDMUEzIikKb2xpZ29kZW5kcm9jeXRlcyA8LSBjKCJNQlAiLCJNT0ciLCJPTElHMSIsIk9MSUcyIiwiU09YMTAiKQpvcGMgPC0gCnJhZGlhbF9nbGlhIDwtIGMoIlBUUFJDIiwiQUlGMSIsIkFER1JFMSIsICJWSU0iLCAiVE5DIiwiUFRQUloxIiwiRkFNMTA3QSIsIkhPUFgiLCJMSUZSIiwKICAgICAgICAgICAgICAiSVRHQjUiLCJJTDZTVCIsIlNMQzFBMyIpCmVwaXRoZWxpYWwgPC0gYygiSEVTMSIsIkhFUzUiLCJTT1gyIiwiU09YMTAiLCJORVMiLCJDREgxIiwiTk9UQ0gxIikKCm1pY3JvZ2xpYSA8LSBjKCJJQkExIiwiUDJSWTEyIiwiUDJSWTEzIiwiVFJFTTExOSIsICJHUFIzNCIsIlNJR0xFQ0giLCJUUkVNMiIsCiAgICAgICAgICAgICAgICJDWDNDUjEiLCJGQ1JMUyIsIk9MRk1MMyIsIkhFWEIiLCJUR0ZCUjEiLCAiU0FMTDEiLCJNRVJUSyIsCiAgICAgICAgICAgICAgICJQUk9TMSIpCgpmZWF0dXJlc19saXN0IDwtIGMoIk1LSTY3IiwiU09YMiIsIlBPVTVGMSIsIkRMWDIiLCJQQVg2IiwiU09YOSIsIkhFUzEiLCJORVMiLCJSQkZPWDMiLCJNQVAyIiwiTkNBTTEiLCJDRDI0IiwiR1JJQTIiLCJHUklOMkIiLCJHQUJCUjEiLCJHQUQxIiwiR0FEMiIsIkdBQlJBMSIsIkdBQlJCMiIsIlRIIiwiQUxESDFBMSIsIkxNWDFCIiwiTlI0QTIiLCJDT1JJTiIsIkNBTEIxIiwiS0NOSjYiLCJDWENSNCIsIklUR0E2IiwiU0xDMUEzIiwiQ0Q0NCIsIkFRUDQiLCJTMTAwQiIsICJQREdGUkEiLCJPTElHMiIsIk1CUCIsIkNMRE4xMSIsIlZJTSIsIlZDQU0xIikKCnNob3J0X2xpc3QgPC0gYygiTUtJNjciLCJTT1g5IiwiSEVTMSIsIk5FUyIsIkRMWDIiLCJSQkZPWDMiLCJNQVAyIiwiVEgiLCJDQUxCMSIsIktDTko2IiwiU0xDMUEzIiwiQ0Q0NCIsIkFRUDQiLCJTMTAwQiIsIk9MSUcyIiwiTUJQIiwiVklNIikKCgoKYGBgCgpWaWV3IG9uIFVNQVAKCmBgYHtyfQoKSWRlbnRzKHNldSkgPC0gIlJOQV9zbm5fcmVzLjAuNiIKCmZvciAoaSBpbiBOUENfb3JTdGVtTGlrZSkgewogIHByaW50KEZlYXR1cmVQbG90KHNldSwgZmVhdHVyZXMgPSBpLCBtaW4uY3V0b2ZmID0gJ3ExJywgbWF4LmN1dG9mZiA9ICdxOTcnLCBsYWJlbCA9IFRSVUUpKQp9CgpgYGAKCmBgYHtyfQpJZGVudHMoc2V1KSA8LSAiUk5BX3Nubl9yZXMuMC42IgoKZm9yIChpIGluIGFzdHJvY3l0ZXMpIHsKICBwcmludChGZWF0dXJlUGxvdChzZXUsIGZlYXR1cmVzID0gaSwgbWluLmN1dG9mZiA9ICdxMScsIG1heC5jdXRvZmYgPSAncTk3JywgbGFiZWwgPSBUUlVFKSkKfQoKYGBgCgpgYGB7cn0KCklkZW50cyhzZXUpIDwtICJSTkFfc25uX3Jlcy4wLjYiCgpmb3IgKGkgaW4gcmFkaWFsX2dsaWEpIHsKICBwcmludChGZWF0dXJlUGxvdChzZXUsIGZlYXR1cmVzID0gaSwgbWluLmN1dG9mZiA9ICdxMScsIG1heC5jdXRvZmYgPSAncTk3JywgbGFiZWwgPSBUUlVFKSkKfQoKYGBgCgpgYGB7cn0KSWRlbnRzKHNldSkgPC0gIlJOQV9zbm5fcmVzLjAuNiIKCm1hdHVyZV9uZXVyb25zQiA9IGMoIlJCRk9YMyIsIlNZUCIsIlZBTVAxIiwiVkFNUDIiLCJUVUJCMyIsIlNZVDEiLCJCU04iLCJIT01FUjEiLCJTTEMxN0E2IikKZm9yIChpIGluIG1hdHVyZV9uZXVyb25zQikgewogIHByaW50KEZlYXR1cmVQbG90KHNldSwgZmVhdHVyZXMgPSBpLCBtaW4uY3V0b2ZmID0gJ3ExJywgbWF4LmN1dG9mZiA9ICdxOTcnLCBsYWJlbCA9IFRSVUUpKQp9CgoKCmBgYAoKCkRvdCBwbG90cyBhbmQgaGVhdG1hcHMKCmBgYHtyfQpEb3RQbG90KHNldSwgZmVhdHVyZXMgPSByYWRpYWxfZ2xpYSkrIFJvdGF0ZWRBeGlzKCkKRG90UGxvdChzZXUsIGZlYXR1cmVzID0gTlBDX29yU3RlbUxpa2UpICsgUm90YXRlZEF4aXMoKQpEb3RQbG90KHNldSwgZmVhdHVyZXMgPSBhc3Ryb2N5dGVzKSArIFJvdGF0ZWRBeGlzKCkKCmBgYAoKRmluZCBjbHVzdGVyIG1hcmtlcnMKCmBgYHtyfQpJZGVudHMoc2V1KSA8LSAiUk5BX3Nubl9yZXMuMC42IgpDbHVzdGVyTWFya2VycyA8LSBGaW5kQWxsTWFya2VycyhzZXUsIG9ubHkucG9zID0gVFJVRSkKCmBgYApIYXZlIGEgbG9vayBhdCB0aGUgdG9wIGNsdXN0ZXIgbWFya2VycwpgYGB7cn0KaGVhZChDbHVzdGVyTWFya2VycykKdG9wNSA8LSBDbHVzdGVyTWFya2VycyAlPiUgZ3JvdXBfYnkoY2x1c3RlcikgJT4lIHRvcF9uKG49NSwgd3QgPWF2Z19sb2cyRkMpCgp0b3AyIDwtIENsdXN0ZXJNYXJrZXJzICU+JSBncm91cF9ieShjbHVzdGVyKSAlPiUgdG9wX24obj0yLCB3dCA9YXZnX2xvZzJGQykKRG9IZWF0bWFwKHNldSwgZmVhdHVyZXMgPSB0b3A1JGdlbmUsIHNpemUgPSAzLCBhbmdsZSA9IDkwLCBncm91cC5ieSA9ICJSTkFfc25uX3Jlcy4wLjYiKQoKRG9IZWF0bWFwKHNldSwgZmVhdHVyZXMgPSB0b3AyJGdlbmUsIHNpemUgPSAzLCBhbmdsZSA9IDkwLCBncm91cC5ieSA9ICJSTkFfc25uX3Jlcy4wLjYiKQpgYGAKCk5vdyB1c2UgRW5yaWNoUiB0byBjaGVjayBjZWxsIHR5cGUgbGlicmFyaWVzCgpgYGB7cn0Kc2V0RW5yaWNoclNpdGUoIkVucmljaHIiKSAjIEh1bWFuIGdlbmVzCiMgbGlzdCBvZiBhbGwgdGhlIGRhdGFiYXNlcwojIGdldCB0aGUgcG9zc2libGUgbGlicmFyaWVzCmRicyA8LSBsaXN0RW5yaWNockRicygpCgojIHRoaXMgd2lsbCBsaXN0IHRoZSBwb3NzaWJsZSBsaWJyYXJpZXMKZGJzCgojIHNlbGVjdCBsaWJyYXJpZXMgd2l0aCBjZWxsIHR5cGVzCmRiIDwtIGMoJ0NlbGxNYXJrZXJfQXVnbWVudGVkXzIwMjEnLCdBemltdXRoX0NlbGxfVHlwZXNfMjAyMScpCgojIGZ1bmN0aW9uIGZvciBhIHF1aWNrIGxvb2sKY2hlY2tDZWxsdHlwZXMgPC0gZnVuY3Rpb24oY2x1c3Rlcl9udW0gPSAwKXsKICBjbHVzdGVyWCA8LSBDbHVzdGVyTWFya2VycyAlPiUgZmlsdGVyKGNsdXN0ZXIgPT0gY2x1c3Rlcl9udW0gJiBhdmdfbG9nMkZDID4gMC4yNSkKICBnZW5lcyA8LSBjbHVzdGVyWCRnZW5lCiAgIyB0aGUgY2VsbCB0eXBlIGxpYnJhcmllcwogICMgZ2V0IHRoZSByZXN1bHRzIGZvciBlYWNoIGxpYnJhcnkKICBjbHVzdGVyWC5jZWxsIDwtIGVucmljaHIoZ2VuZXMsIGRhdGFiYXNlcyA9IGRiKQogICMgdmlzdWFsaXplIHRoZSByZXN1bHRzCnByaW50KHBsb3RFbnJpY2goY2x1c3RlclguY2VsbFtbMV1dLCBzaG93VGVybXMgPSAyMCwgbnVtQ2hhciA9IDQwLCB5ID0gIkNvdW50Iiwgb3JkZXJCeSA9ICJQLnZhbHVlIiwgdGl0bGUgPSAnQ2VsbE1hcmtlcl9BdWdtZW50ZWRfMjAyMScpKQpwcmludChwbG90RW5yaWNoKGNsdXN0ZXJYLmNlbGxbWzJdXSwgc2hvd1Rlcm1zID0gMjAsIG51bUNoYXIgPSA0MCwgeSA9ICJDb3VudCIsIG9yZGVyQnkgPSAiUC52YWx1ZSIsIHRpdGxlID0gJ0F6aW11dGhfQ2VsbF9UeXBlc18yMDIxJykpCgp9CgoKYGBgCgpDaGVjayBlYWNoIGNsdXN0ZXIKYGBge3J9CmNsdXN0ZXIwIDwtIGNoZWNrQ2VsbHR5cGVzKGNsdXN0ZXJfbnVtID0gMCkKCmBgYApgYGB7cn0KY2x1c3RlcjEgPC0gY2hlY2tDZWxsdHlwZXMoY2x1c3Rlcl9udW0gPSAxKQpgYGAKCmBgYHtyfQpjbHVzdGVyMiA8LSBjaGVja0NlbGx0eXBlcyhjbHVzdGVyX251bSA9IDIpCmBgYAoKYGBge3J9CmNsdXN0ZXIzIDwtIGNoZWNrQ2VsbHR5cGVzKGNsdXN0ZXJfbnVtID0gMykKYGBgCmBgYHtyfQpjbHVzdGVyNCA8LSBjaGVja0NlbGx0eXBlcyhjbHVzdGVyX251bSA9IDQpCmBgYApgYGB7cn0KY2x1c3RlcjUgPC0gY2hlY2tDZWxsdHlwZXMoY2x1c3Rlcl9udW0gPSA1KQpgYGAKYGBge3J9CmNsdXN0ZXI2IDwtIGNoZWNrQ2VsbHR5cGVzKGNsdXN0ZXJfbnVtID0gNikKYGBgCmBgYHtyfQpjbHVzdGVyNyA8LSBjaGVja0NlbGx0eXBlcyhjbHVzdGVyX251bSA9IDcpCmBgYApgYGB7cn0KY2x1c3RlcjggPC0gY2hlY2tDZWxsdHlwZXMoY2x1c3Rlcl9udW0gPSA4KQpgYGAKYGBge3J9CmNsdXN0ZXI5IDwtIGNoZWNrQ2VsbHR5cGVzKGNsdXN0ZXJfbnVtID0gOSkKYGBgCmBgYHtyfQpjbHVzdGVyMTAgPC0gY2hlY2tDZWxsdHlwZXMoY2x1c3Rlcl9udW0gPSAxMCkKYGBgCkFkZCBjZWxsIHR5cGUgYW5ub3RhdGlvbnMKCmBgYHtyfQojIHdlIG5lZWQgdG8gc2V0IHRoZSBpZGVudGl0eSB0byByZW5hbWUKSWRlbnRzKHNldSkgPC0gIlJOQV9zbm5fcmVzLjAuNiIKCiMgd2UgbmVlZCB0byBtYWtlIGEgdmVjdG9yIG9mIHRoZSBjZWxsIHR5cGUgaW4gdGhlIHNhbWUgb3JkZXIgLSBpbiB0aGUgY2x1c3RlciBvcmRlcgoKY2VsbF90eXBlcyA8LSBjKCJOUEMiLCAiUkctYXN0cm8iLCJOUEMtYXN0cm8iLAogICAgICAgICAgICAgICAgICJzdGVtIGNlbGwgMSIsIk5QQy1wcm9saWZlcmF0aW5nIiwiTmV1cm9uIiwKICAgICAgICAgICAgICAgICAic3RlbSBjZWxsIDIiLCJlbmRvdGhlbGlhbCIsInByb2xpZmVyYXRpbmciLAogICAgICAgICAgICAgICAgICJwcm9nZW5pdG9ycy1uZXN0aW4iLCJnbGlhIHN0ZW0gY2VsbCIpCm5hbWVzKGNlbGxfdHlwZXMpIDwtIGxldmVscyhzZXUpCgoKc2V1IDwtIFJlbmFtZUlkZW50cyhzZXUsIGNlbGxfdHlwZXMpCnNldSA8LSBBZGRNZXRhRGF0YShvYmplY3Q9c2V1LCBtZXRhZGF0YT1JZGVudHMoc2V1KSwgY29sLm5hbWUgPSAiQ2VsbFR5cGVzIikKCkRpbVBsb3Qoc2V1LCBsYWJlbCA9IFRSVUUpCgpJZGVudHMoc2V1KSA8LSAiUk5BX3Nubl9yZXMuMC42IgpjZWxsX3R5cGVzIDwtIGMoIk5QQyIsICJnbGlhIiwiTlBDIiwKICAgICAgICAgICAgICAgICAic3RlbSIsIk5QQyIsIk5ldXJvbiIsCiAgICAgICAgICAgICAgICAgInN0ZW0iLCJnbGlhIiwic3RlbSIsCiAgICAgICAgICAgICAgICAgInN0ZW0iLCJnbGlhIikKbmFtZXMoY2VsbF90eXBlcykgPC0gbGV2ZWxzKHNldSkKc2V1IDwtIFJlbmFtZUlkZW50cyhzZXUsIGNlbGxfdHlwZXMpCnNldSA8LSBBZGRNZXRhRGF0YShvYmplY3Q9c2V1LCBtZXRhZGF0YT1JZGVudHMoc2V1KSwgY29sLm5hbWUgPSAiTWFpbkNlbGx0eXBlcyIpCgpEaW1QbG90KHNldSwgbGFiZWwgPSBUUlVFKQoKCmBgYAoKU2VlIGNlbGwgY291bnRzIGZvciBlYWNoIGxpbmUgYW5kIGNlbGwgdHlwZQoKYGBge3J9CmNkZiA8LSBhcy5kYXRhLmZyYW1lKHRhYmxlKHNldSRzb3Vwb3JjZWxsX2Fzc2lnbm1lbnQsc2V1JENlbGxUeXBlcykpCgpjZGYyIDwtIGFzLmRhdGEuZnJhbWUodGFibGUoc2V1JHNvdXBvcmNlbGxfYXNzaWdubWVudCxzZXUkTWFpbkNlbGx0eXBlcykpCgoKd3JpdGUuY3N2KGNkZiwgIi9Vc2Vycy9yaGFsZW5hdGhvbWFzL0RvY3VtZW50cy9EYXRhL3NjUk5Bc2VxL0FESERfWk5aX01jZ2lsbC9zb3VwX0FESERfY2VsbGNvdW50c2xpbmV0eXBlLmNzdiIpCgpkZl93aWRlIDwtIGNkZiAlPiUKICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gVmFyMiwgdmFsdWVzX2Zyb20gPSBGcmVxKQoKd3JpdGUuY3N2KGRmX3dpZGUsICIvVXNlcnMvcmhhbGVuYXRob21hcy9Eb2N1bWVudHMvRGF0YS9zY1JOQXNlcS9BREhEX1pOWl9NY2dpbGwvc291cF9BREhEX2NlbGxjb3VudHNsaW5ldHlwZTIuY3N2IikKCmRmX3dpZGUyIDwtIGNkZjIgJT4lCiAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IFZhcjIsIHZhbHVlc19mcm9tID0gRnJlcSkKCgpgYGAKCmBgYHtyfQoKSWRlbnRzKHNldSkgPC0gInNvdXBvcmNlbGxfc3RhdHVzIgp0YWJsZShzZXUkc291cG9yY2VsbF9zdGF0dXMpCnNpbmdsZXQgPC0gc3Vic2V0KHNldSwgaWRlbnRzID0gInNpbmdsZXQiKQoKYGBgCgoKYGBge3J9ClZsblBsb3Qoc2luZ2xldCwgZmVhdHVyZXMgPSAibkZlYXR1cmVfUk5BIiwgZ3JvdXAuYnkgPSAic291cG9yY2VsbF9hc3NpZ25tZW50IikKCklkZW50cyhzaW5nbGV0KTwtICJNYWluQ2VsbHR5cGVzIgpEaW1QbG90KHNpbmdsZXQsIGdyb3VwLmJ5ID0gInNvdXBvcmNlbGxfYXNzaWdubWVudCIsIGxhYmVsID0gVFJVRSkKCmBgYAoKV2UgbWlnaHQgbmVlZCB0byBzZXBhcmF0ZSBhbmQgaGFybW9uaXplIGVhY2ggY2VsbCB0eXBlLgoKYGBge3J9CiMgbWFrZSBhIGxpc3Qgb2Ygc2V1cmF0IG9iamVjdHMgYnkgb3VyIGNlbGwgdHlwZSB2YXJpYWJsZQpzdWJsaXN0IDwtIFNwbGl0T2JqZWN0KHNpbmdsZXQsIHNwbGl0LmJ5ID0gInNvdXBvcmNlbGxfYXNzaWdubWVudCIpCiMgbm9ybWFsaXplIGFuZCBmaW5kIHZhcmlhYmxlIGZlYXR1cmVzCmZvciAoaSBpbiAxOmxlbmd0aChzdWJsaXN0KSl7CiAgc3VibGlzdFtbaV1dIDwtIE5vcm1hbGl6ZURhdGEoc3VibGlzdFtbaV1dLCB2ZXJib3NlID0gRkFMU0UpCiAgc3VibGlzdFtbaV1dIDwtIEZpbmRWYXJpYWJsZUZlYXR1cmVzKHN1Ymxpc3RbW2ldXSwgc2VsZWN0aW9uLm1ldGhvZCA9ICJ2c3QiKQp9CgoKCmBgYAoKYGBge3J9CiMgQ3JlYXRlIGFuIGVtcHR5IFNldXJhdCBvYmplY3QgdG8gc3RvcmUgdGhlIGludGVncmF0ZWQgZGF0YQojIFRha2UgdGhlIGZpcnN0IFNldXJhdCBvYmplY3QgZnJvbSB0aGUgbGlzdCBhcyB0aGUgc3RhcnRpbmcgcG9pbnQKaW50ZWdyYXRlZF9zZXVyYXQgPC0gc3Vic2V0KHN1Ymxpc3RbWzFdXSkKCgojIEl0ZXJhdGUgb3ZlciB0aGUgbGlzdCBvZiBTZXVyYXQgb2JqZWN0cwpmb3IgKGkgaW4gMTpsZW5ndGgoc3VibGlzdCkpIHsKICAjIFJlbmFtZSB0aGUgJ29yaWcuaWRlbnQnIG1ldGFkYXRhIGluc2lkZSB0aGUgc2V1cmF0IG9iamVjdCB0byBtYXRjaCB0aGUgb2JqZWN0IG5hbWUgaW4gdGhlIGxpc3QKICBzdWJsaXN0W1tpXV0kb3JpZy5pZGVudCA8LSBuYW1lcyhzdWJsaXN0KVtpXQoKfQoKc2FtcGxlLmxpc3QgPC0gc3VibGlzdApmb3IgKGkgaW4gMTpsZW5ndGgoc2FtcGxlLmxpc3QpKSB7CiAgIyBOb3JtYWxpemUgYW5kIHNjYWxlIHRoZSBkYXRhCiAgc2FtcGxlLmxpc3RbW2ldXSA8LSBOb3JtYWxpemVEYXRhKHNhbXBsZS5saXN0W1tpXV0sIHZlcmJvc2UgPSBGQUxTRSkKICBzYW1wbGUubGlzdFtbaV1dIDwtIFNjYWxlRGF0YShzYW1wbGUubGlzdFtbaV1dLCB2ZXJib3NlID0gRkFMU0UpCiAgIyBGaW5kIHZhcmlhYmxlIGZlYXR1cmVzCiAgc2FtcGxlLmxpc3RbW2ldXSA8LSBGaW5kVmFyaWFibGVGZWF0dXJlcyhzYW1wbGUubGlzdFtbaV1dLCBzZWxlY3Rpb24ubWV0aG9kID0gInZzdCIpCiAgIyBHZXQgdGhlIHZhcmlhYmxlIGZlYXR1cmVzCiAgdmFyaWFibGVfZmVhdHVyZXMgPC0gVmFyaWFibGVGZWF0dXJlcyhzYW1wbGUubGlzdFtbaV1dKQogICMgUnVuIFBDQSB3aXRoIHRoZSB2YXJpYWJsZSBmZWF0dXJlcwogIHNhbXBsZS5saXN0W1tpXV0gPC0gUnVuUENBKHNhbXBsZS5saXN0W1tpXV0sIHZlcmJvc2UgPSBGQUxTRSwgbnBjcyA9IDMwLCBmZWF0dXJlcyA9IHZhcmlhYmxlX2ZlYXR1cmVzKQp9CgppbnQuYW5jaG9ycyA8LSBGaW5kSW50ZWdyYXRpb25BbmNob3JzKG9iamVjdC5saXN0ID0gc2FtcGxlLmxpc3QsIGRpbXMgPSAxOjMwLCByZWR1Y3Rpb24gPSAicnBjYSIpCmludGVncmF0ZWRfc2V1cmF0IDwtIEludGVncmF0ZURhdGEoYW5jaG9yc2V0ID0gaW50LmFuY2hvcnMsICBkaW1zID0gMTozMCwgay53ZWlnaHQgPSA3MikKIyB0aGUgayB2YWx1ZSBpcyB0aGUgcHJvYmxlbQojIG11c3Qgc2V0IHRoZSBrIHdlaWdodCB0byB0aGUgbG93ZXN0IGNlbGwgY291bnQKCgpgYGAKCmBgYHtyfQoKRGVmYXVsdEFzc2F5KGludGVncmF0ZWRfc2V1cmF0KSA8LSAiaW50ZWdyYXRlZCIKaW50ZWdyYXRlZF9zZXVyYXQgPC0gU2NhbGVEYXRhKGludGVncmF0ZWRfc2V1cmF0LCB2ZXJib3NlID0gRkFMU0UpCiMgb25seSB0aGUgaW50ZWdyYXRlZCBmZWF0dXJlcyB3aWxsIGJlIHRoZSBwY2EgaW5wdXQKCmludGVncmF0ZWRfc2V1cmF0IDwtIFJ1blBDQShpbnRlZ3JhdGVkX3NldXJhdCwgbnBjcyA9IDIwLCB2ZXJib3NlID0gRkFMU0UpCmludGVncmF0ZWRfc2V1cmF0IDwtIFJ1blVNQVAoaW50ZWdyYXRlZF9zZXVyYXQsIHJlZHVjdGlvbiA9ICJwY2EiLCBkaW1zID0gMToyMCwgbi5uZWlnaGJvcnMgPSA4MSkKCgpgYGAKCmBgYHtyfQpvdXRwdXRfcGF0aCA8LSAiL1VzZXJzL3JoYWxlbmF0aG9tYXMvRG9jdW1lbnRzL0RhdGEvc2NSTkFzZXEvQURIRF9aTlpfTWNnaWxsLyIKCnNhdmVSRFMoaW50ZWdyYXRlZF9zZXVyYXQscGFzdGUob3V0cHV0X3BhdGgsIkludGVncmF0ZWRTZXVyYXRHcmFwaHMuUkRTIixzZXAgPSAiIikpCgpgYGAKCmBgYHtyfQoKaW50ZWdyYXRlZF9zZXVyYXQgPC0gRmluZE5laWdoYm9ycyhpbnRlZ3JhdGVkX3NldXJhdCwgZGltcyA9IDE6MjAsIGsucGFyYW0gPSA4MSkKaW50ZWdyYXRlZF9zZXVyYXQgPC0gRmluZENsdXN0ZXJzKGludGVncmF0ZWRfc2V1cmF0LCByZXNvbHV0aW9uID0gYygwLjYsMSkgKQoKYGBgCmBgYHtyfQpEaW1QbG90KGludGVncmF0ZWRfc2V1cmF0LCBncm91cC5ieSA9ICJvcmlnLmlkZW50IikKI211Y2ggYmV0dGVyIGludGVncmF0aW9uCmBgYApgYGB7cn0KI2ludGVncmF0ZWRfc2V1cmF0JGludGVncmF0ZWRfc25uX3Jlcy4wLjYKRGltUGxvdChpbnRlZ3JhdGVkX3NldXJhdCwgZ3JvdXAuYnkgPSAiaW50ZWdyYXRlZF9zbm5fcmVzLjAuNiIsIGxhYmVsPVRSVUUpCkRpbVBsb3QoaW50ZWdyYXRlZF9zZXVyYXQsIGdyb3VwLmJ5ID0gImludGVncmF0ZWRfc25uX3Jlcy4xIiwgbGFiZWwgPSBUUlVFKQoKYGBgCgpOb3cgY2VsbHMgcGVyIGNsdXN0ZXIKCmBgYHtyfQp0YWJsZShpbnRlZ3JhdGVkX3NldXJhdCRpbnRlZ3JhdGVkX3Nubl9yZXMuMC42LCBpbnRlZ3JhdGVkX3NldXJhdCRvcmlnLmlkZW50KQoKdGFibGUoaW50ZWdyYXRlZF9zZXVyYXQkaW50ZWdyYXRlZF9zbm5fcmVzLjEsIGludGVncmF0ZWRfc2V1cmF0JG9yaWcuaWRlbnQpCmBgYAoKV2hpY2ggY2VsbHMgbWF0Y2ggdG8gd2hpY2ggc3ViamVjdD8KCkZyb20gTWljaGFlbHMgY29ycmVsYXRpb246CmBgYHtyfQpjb2RlLnRiIDwtIHJlYWQudGFibGUoZmlsZSA9ICIvVXNlcnMvcmhhbGVuYXRob21hcy9Eb2N1bWVudHMvRGF0YS9zY1JOQXNlcS9BREhEX1pOWl9NY2dpbGwvR2Vub3R5cGVfSURfa2V5LnR4dCIsIApoZWFkZXIgPSBUUlVFLCBzZXAgPSAiXHQiKQoKY2xhc3MoY29kZS50YikKCnNldSA8LSByZWFkUkRTKCIvVXNlcnMvcmhhbGVuYXRob21hcy9Eb2N1bWVudHMvRGF0YS9zY1JOQXNlcS9BREhEX1pOWl9NY2dpbGwvSW50ZWdyYXRlZFNldXJhdEdyYXBocy5SRFMiKQoKc2F2ZVJEUyhzZXUsICIvVXNlcnMvcmhhbGVuYXRob21hcy9Eb2N1bWVudHMvRGF0YS9zY1JOQXNlcS9BREhEX1pOWl9NY2dpbGwvSW50ZWdyYXRlZFNldXJhdEdyYXBocy5SRFMiKQoKYGBgCmBgYHtyfQoKIyBhZGQgdGhlIGFzc2lnbmVkIGxpbmVzIGludG8gdGhlIHNldXJhdCBvYmplY3QKIyBBc3N1bWluZyB5b3VyIGRhdGEgZnJhbWUgaXMgbmFtZWQgJ2xvb2t1cF9kZicgYW5kIGhhcyBjb2x1bW5zICdHZW5vdHlwZV9JRCcgYW5kICdDbHVzdGVyX0lEJwpsb29rdXBfdGFibGUgPC0gY29kZS50YlssIGMoIkNsdXN0ZXJfSUQiLCAiR2Vub3R5cGVfSUQiKV0KIyBhZGQgdGhlIGEgbmV3IG1ldGFkYXRhIHNsb3QKc2V1JEdlbm90eXBlX0lEIDwtIGxvb2t1cF90YWJsZSRHZW5vdHlwZV9JRFttYXRjaChzZXUkc291cG9yY2VsbF9hc3NpZ25tZW50LCBsb29rdXBfdGFibGUkQ2x1c3Rlcl9JRCldCgoKc2V1JEdlbm90eXBlX0lEIDwtIGlmZWxzZSgKICBzZXUkc291cG9yY2VsbF9hc3NpZ25tZW50ICVpbiUgbG9va3VwX3RhYmxlJENsdXN0ZXJfSUQsCiAgbG9va3VwX3RhYmxlJEdlbm90eXBlX0lEW21hdGNoKHNldSRzb3Vwb3JjZWxsX2Fzc2lnbm1lbnQsIGxvb2t1cF90YWJsZSRDbHVzdGVyX0lEKV0sCiAgInVuYXNzaWduZWQiCikKCgoKdW5pcXVlKHNldSRHZW5vdHlwZV9JRCkKCmBgYAoKTm93IG1ha2UgYSB0YWJsZSBvZiB0aGUgYXNzaWduZWQgY2VsbCBjb3VudHMKCmBgYHtyfQoKZ2VuZS5jb3VudCA8LSBhcy5kYXRhLmZyYW1lKHRhYmxlKHNldSRHZW5vdHlwZV9JRCkpCgpncm91cC5nZW5lIDwtIGFzLmRhdGEuZnJhbWUodGFibGUoc2V1JHNvdXBvcmNlbGxfYXNzaWdubWVudCwgc2V1JEdlbm90eXBlX0lEKSkKCnNvdXAuY291bnQgPC0gYXMuZGF0YS5mcmFtZSh0YWJsZShzZXUkc291cG9yY2VsbF9hc3NpZ25tZW50KSkKCiMgQXNzdW1pbmcgeW91ciBsb25nIHRhYmxlIGlzIG5hbWVkICdsb25nX3RhYmxlJwp3aWRlX3RhYmxlIDwtIGdyb3VwLmdlbmUgJT4lCiAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IFZhcjEsIHZhbHVlc19mcm9tID0gRnJlcSkKCndyaXRlLmNzdih3aWRlX3RhYmxlLCIvVXNlcnMvcmhhbGVuYXRob21hcy9Eb2N1bWVudHMvRGF0YS9zY1JOQXNlcS9BREhEX1pOWl9NY2dpbGwvU291cG9HZW5lSUQuY3N2IikKCmBgYAoK